- •Глава 6 Программирование в среде Delphi
- •§1. Разработка линейных программ
- •Этапы разработки программы
- •Целые типы
- •Символьный тип
- •Булевый тип
- •Переменные и константы
- •Оператор присваивания
- •Структура программы на языке Delphi
- •Некоторые функции преобразования типов
- •Среда программирования Delphi Главные составные части среды программирования
- •Структура проекта
- •Сохранение проекта
- •Структура модуля
- •Компиляция и выполнение проекта
- •§2. Стандартные и библиотечные функции в линейных программах
- •Некоторые стандартные библиотечные функции
- •Некоторые функции и процедуры даты
- •Ввод из окна ввода
- •Вывод в окно сообщения
- •Примечание
- •§ 3. Программы с разветвлениями
- •Логические выражения
- •Условный оператор
- •Оператор выбора
- •Оператор перехода
- •Компонент ListBox
- •Компонент tComboBox
- •Некоторые приемы работы с отладчиком
- •Примечание
- •§4. Циклы
- •Операторы цикла
- •Оператор цикла с параметром
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Компонент Memo
- •§ 5. Использование массивов в программах, компонента Memo для ввода данных в массив
- •Массивы
- •Компонент Memo для ввода и вывода массивов
- •§ 6. Разработка многооконных проектов. Двумерные массивы. Компонент StringGrid
- •Компонент StringGrid
- •Технология создания многооконных проектов
- •Ввод и вывод двумерных массивов c помощью компонента StringGrid
- •§7. Внешние файлы
- •Процедуры работы с файлами
- •Главное меню
- •§8. Разработка внутренних процедур и функций
- •Процедуры
- •Функции
- •Литература
Компонент Memo
|
|
Главные свойства компонента Memo
|
Свойство |
Назначение |
|
Name |
Имя компонента |
|
Text |
Текст, находящийся в поле Memo. Рассматривается как единое целое |
|
Lines |
Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру |
|
Lines.Count |
Количество строк в поле Memo |
Например, присвоить переменной ST весь текст, находящийся в компоненте Memo можно так:
ST:=Memo1.Text;
Добавить строку:
Memo1.Lines.Add(Еще одна строка);
Переменной можно присвоить содержимое одной строки:
Stroke:=Memo1.Lines[i];
Практика
Задача
Составить программу для вычисления таблиц значений квадратов, кубов, квадратных и кубических корней, n, /(4n2),1/n.
Компоненты
|
Имя компонента |
Свойства компонента |
Значение |
Назначение |
|
Form1 |
Caption |
Квадраты, кубы, кв. и куб. корни, пи*n, пи/4*(n в кв.), 1/n |
Заголовок формы |
|
Label1 |
Caption |
Программа вычисляет по вашему желанию таблицы значений в заданном интервале натуральных чисел n |
Справочная информация для пользователя программы |
|
Label2 |
Caption |
Задайте интервал значений натурального числа n |
Подсказка пользователю |
|
Label3 |
Caption |
|
Поле для вывода результатов |
|
Edit1 |
Text |
|
Поле для ввода начального значения n |
|
Edit2 |
Text |
|
Поле для ввода конечного значения n |
|
ComboBox1 |
Text
Items |
Выберите нужное математическое выражение Квадраты Кубы Квадратные корни Кубические корни Пи*n Пи/[4*(n в кв.)] 1/n |
Текст в заголовке списка
Значения строк в списке |
|
Button1 |
Caption |
Вычислить |
Кнопка для вычисления |
|
Button2 |
Caption |
Выход |
Кнопка закрытия формы и выхода из программы |
Переменные
|
Обозначение в программе |
Содержание |
Тип |
|
n |
Текущее значение числа |
Целый |
|
n1 |
Начальное значение интервала натуральных чисел |
Целый |
|
n2 |
Конечное значение интервала натуральных чисел |
Целый |
Проект формы
|
|
Текст модуля
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Math;
// обязательно к стандартному списку подключить библиотеку
// математических функций Math
………………………
var
Form1: TForm1;
n1,n2:Integer;{начальное и конечное значения интервала
натуральных чисел}
n:integer; // текущее значение числа
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
// процедура закрывает форму и осуществляет
// выход из программы
Form1.Close
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// ввод начального и конечного значений интервала
// натуральных чисел
n1:=StrToInt(Edit1.Text);
n2:=StrToInt(Edit2.Text);
Case ComboBox1.ItemIndex of
0: begin
// очистка поля ввода от предыдущих значений
label3.Caption:=' ';
// если в поле со списком выбрано значение Квадраты
// в цикле от n1 до n2 с шагом 1 вычисляются значения
// квадратов чисел
For n:=n1 To n2 Do
Begin
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+' '+IntToStr(Sqr(n));
end;
end;
1:begin
// очистка поля ввода от предыдущих значений
label3.Caption:=' ';
// если в поле со списком выбрано значение Кубы
// в цикле от n1 до n2 с шагом 1 вычисляются значения
// кубов чисел
For n:=n1 To n2 Do
Begin
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+ ' ' + IntToStr(n*n*n);
end;
end;
2:begin label3.Caption:=' ';
// если в поле со списком выбрано значение Квадратные корни
// в цикле от n1 до n2 с шагом 1 вычисляются значения
// квадратных корней чисел
For n:=n1 To n2 Do
Begin
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+' ' + FloatToStrF(Sqrt(n),Fffixed,10,6);
end;
end;
3:begin label3.Caption:=' ';
// функция логарифм не определена при нуле,
// поэтому сдвигаем интервал значений на единицу
If n1=0 Then begin label3.Caption:='0';n1:=n1+1; end;
// если в поле со списком выбрано значение Кубические корни
// в цикле от n1 до n2 с шагом 1 вычисляются значения
// кубических корней чисел
For n:=n1 To n2 Do
Begin
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+' ' + FloatToStrF(exp(1/3*ln(n)),Fffixed,10,6);
end;
end;
4:begin label3.Caption:=' ';
For n:=n1 To n2 Do
Begin
// если в поле со списком выбрано значение пи*n
// в цикле от n1 до n2 с шагом 1 вычисляются значения
// пи*n чисел
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+' '+ FloatToStrF((pi*n),Fffixed,10,6);
end;
end;
5:begin label3.Caption:=' ';
// если в поле со списком выбрано значение пи/[4*(n в кв.)]
// в цикле от n1 до n2 с шагом 1 вычисляются значения
// пи/[4*(n в кв.)]
If n1=0 Then begin
Label3.Caption:='Бесконечность'; n1:=n1+1
End;
For n:=n1 To n2 Do
Begin
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+' '+ FloatToStrF((pi/(4*n*n)),Fffixed,10,6);
end;
end;
6:begin label3.Caption:=' ';
If n1=0 Then begin
Label3.Caption:=' Бесконечность'; n1:=n1+1
end;
// если в поле со списком выбрано значение 1/n
// в цикле от n1 до n2 с шагом 1 вычисляются значения 1/n
For n:=n1 To n2 Do
Begin
Label3.Caption:= Label3.Caption+ #13+
IntToStr(n)+' '+ FloatToStrF(1/n,Fffixed,10,6);
end;
end;
Else Exit;
end;
end;
end.
Задача
Составить программу для вычисления таблицы уклонов местности. Уклоны местности определяют при проектировании каналов, дорог, направления движения тракторных агрегатов на пашне, изучении эрозии почв. Уклоном i называют отношение превышения h между точками к горизонтальному проложению S между ними. Для вычислений воспользоваться следующими формулами:

Компоненты
|
Имя компонента |
Свойства компонент |
Значение |
Назначение |
|
Form1 |
Caption |
Таблица уклонов |
Заголовок формы |
|
Label1 |
Caption |
При проектировании каналов, дорог, направления движения тракторных агрегатов на пашне, изучении эрозии почв определяют уклоны местности. Уклоном i называют отношение превышения h между точками к горизонтальному проложению S между ними. |
Справочная информация для пользователя программы |
|
Label2 |
Caption |
Интервал изменения превышений |
Подсказка пользователю |
|
Edit1 |
Text |
|
Нижняя граница интервала превышений |
|
Edit2 |
Text |
|
Верхняя граница интервала превышений |
|
Label3 |
Caption |
Шаг изменения превышений |
Подсказка пользователю |
|
Edit3 |
Text |
|
Поле для ввода шага изменения превышений |
|
Label4 |
Caption |
Интервал изменения горизонтальных проложений |
Подсказка пользователю |
|
Edit4 |
Text |
|
Нижняя граница интервала горизонтальных проложений |
|
Edit5 |
Text |
|
Верхняя граница интервала горизонтальных проложений |
|
Label5 |
Caption |
Шаг изменения горизонтальных проложений |
Подсказка пользователю |
|
Edit6 |
Text |
|
Поле для ввода шага изменения горизонтальных проложений |
|
Label6 |
Caption |
|
В это поле программа выводит шапку таблицы уклонов |
|
Memo1 |
Lines
ScrollBars
|
…..
ssBoth |
Компонент для вывода значений таблицы уклонов Выводить обе полосы прокрутки (вертикальную и горизонтальную) |
|
Button1 |
Caption |
ВЫЧИСЛИТЬ |
Кнопка для выполнения |
|
Button2 |
Caption |
ВЫХОД |
Кнопка для завершения работы программы |
Переменные
|
Обозначение в программе |
Содержание |
Тип |
|
h |
Текущее значение превышения |
Вещественный расширенный |
|
h1 |
Нижняя граница интервала превышений |
Вещественный расширенный |
|
h2 |
Верхняя граница интервала превышений |
Вещественный расширенный |
|
s |
Текущее значение горизонтального проложения |
Вещественный расширенный |
|
s1 |
Нижняя граница интервала горизонтальных проложений |
Вещественный расширенный |
|
s2 |
Верхняя граница интервала горизонтальных проложений |
Вещественный расширенный |
|
Dh |
Шаг изменения превышений |
Вещественный расширенный |
|
Ds |
Шаг изменения горизонтальных проложений |
Вещественный расширенный |
|
i |
Текущее значение уклона в тангенсах |
Вещественный расширенный |
|
ig |
Градусная часть уклона |
Целый |
|
im |
Минутная часть уклона |
Целый |
|
Ari |
Текущее значение уклона в градусах |
Вещественный расширенный |
Проект формы
|
|
Текст модуля
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
// библиотека математических функций Math
// подключается программистом
……………
var
Form1: TForm1;
h1,h2: Extended; // границы интервала изменения превышений
Dh:Extended;// шаг изменения превышений
s1,s2:Extended;// интервал изменения горизонтальных проложений
Ds: Extended; // шаг изменения горизонтальных проложений
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close
end;
procedure TForm1.Button1Click(Sender: TObject);
Var i:Extended;// текущее значение уклона в тангенсах
ig:Integer; // градусная часть уклона
im:Integer; // минутная часть уклона
h,s:Extended;// текущее значение превышения и
// горизонтального проложения
ARi:Extended;// текущее значение уклона в градусах
begin
// ввод исходных данных для программы
h1:=StrToFloat(Edit1.Text);
h2:=StrToFloat(Edit2.Text);
Dh:=StrToFloat(Edit3.Text);
s1:=StrToFloat(Edit4.Text);
s2:=StrToFloat(Edit5.Text);
Ds:=StrToFloat(Edit6.Text);
// вывод шапки таблицы уклонов
Label6.Caption:='Превышение Горизонтальное проложение Уклон в тангенсах'
+ ' Уклон в гр., мин.';
// текущее значение превышения принимает значение нижней границы
h:=h1;
{ цикл выполняется, пока текущее значение превышения
не превысит значение правой верхней границы}
While h <= h2 Do
Begin
// текущее значение горизонтального проложения принимает значение
// нижней границы
s:=s1;
{ цикл выполняется, пока текущее значение горизонтального проложения
не превысит значение правой верхней границы}
While s <= s2 Do
begin
// вычисление текущего значения уклона в тангенсах
i:=h/s;
// перевод уклона в градусную меру
ARi:=ArcTan(i)/pi*180;
// выделение целой части — градусная часть уклона
ig := Trunc(ARi);
// вычисление минутной части значения уклона
im:=Round((ARi-ig)*60);
// вывод строки таблицы уклонов
Memo1.Lines.Add(' '+ FloatToStrF(h,Fffixed,6,1) +
' | '
+ FloatToStrF(s,Fffixed,15,2) + ' | '
+ FloatToStrF(i,Fffixed,15,5) + ' | ' +
' ' + IntToStr(ig) + ' ' + IntToStr(im));
// увеличение горизонтального проложения на величину шага
s:=s+Ds;
end;
// увеличение превышения на величину шага
h:=h+Dh;
end;
end;
end.
Один из возможных результатов работы программы

Задача
Составить программу для вычисления числа е.
Известно, что сумма ряда 1+1/1!+1/2!+...+1/n! стремится к числу е. Число е=2,71828 играет важную роль в качестве основания натуральных логарифмов.
Компоненты
|
Имя компонента |
Свойства компонента |
Значение |
Назначение |
|
Form1 |
Caption |
Число е |
Заголовок формы |
|
Label1 |
Caption |
Известно, что сумма ряда 1+1/1!+1/2!+...+1/n! стремится к числу е. Число е=2,71828 играет важную роль в качестве основания натуральных логарифмов
|
Справочная информация для пользователя программы |
|
Label2 |
Caption |
Точность вычисления числа е |
Подсказка пользователю |
|
Edit1 |
Text |
|
Поле для ввода точности вычисления числа е |
|
Button1 |
Caption |
Вычислить |
Кнопка для вычисления |
|
Button2 |
Caption |
Новые данные |
Кнопка для очистки введенного значения точности |
|
Button3 |
Caption |
Выход |
Кнопка для завершения работы программы |
|
Label3 |
Caption |
|
Поле, в которое программа выводит вычисленное значение числа е |
Переменные
|
Обозначение в программе |
Содержание |
Тип |
|
n |
Номер члена ряда -1 |
Целый |
|
e |
Число е |
Вещественный, расширенный |
|
z |
Знаменатель члена ряда |
Длинный целый |
|
element |
Текущий элемент ряда |
Вещественный, расширенный |
|
T |
Точность вычисления числа е |
Вещественный, расширенный |
Проект формы
|
|
Текст модуля
unit Unit1;
……………………………
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Clear
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close
end;
procedure TForm1.Button1Click(Sender: TObject);
Var e: Extended; // число е
element:Extended; // текущий элемент ряда
T: Extended;// точность вычисления числа е
n:Integer; // номер члена ряда -1
z:LongInt; // знаменатель члена ряда
begin
// инициализируем числом 1 значения переменных e, z, n
e:=1;
z:=1;
n:=1;
// ввод точности вычисления числа e
T:=StrToFloat(Edit1.Text);
//цикл вычисления суммы ряда для числа e
Repeat
z:=Z*n;
element:=1/z ;
e:=e+element;
n:=n+1;
{ выход из цикла происходит, когда очередной член ряда
меньше или равен точности вычисления числа е}
Until T >=element ;
// вывод вычисленного числа e
Label3.Caption:='число е равно: '+FloatToStrF(e,Fffixed,10,8)
end;
end.

Задачи для самостоятельного решения
Циклы с условием
№ 4.1. Написать программу для вычисления значений Y= Z2 при изменении Z от N1 до N2 с шагом K, где K, N1, N2 — натуральные числа.
№ 4.2. Написать программу для вычисления суммы нечетных чисел натурального ряда в интервале от N1 до N2, , где N1, N2 — натуральные числа.
№ 4.3. Написать
программу для вычисления значений
при
измененииY
от N1
до N2
с шагом K,
где K,
N1,
N2
— натуральные числа.
№ 4.4. Написать программу для вычисления суммы обратных величин чисел от N1 до N2 с шагом K, где K, N1, N2 — натуральные числа.
№ 4.5. Написать программу для вычисления выражения S=*R*R при изменении R в интервале от 1 до N с шагом K где K, N — натуральные числа.
№ 4.6. Составить программу для вычисления членов последовательности:
,
где n
— натуральное
число.
Члены последовательности вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа (0<<0,0001).
№ 4.7. Составить программу для вычисления суммы ряда:
,
где n
— натуральное
число.
Сумму ряда вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа (0<<0,0001).
№ 4.8. Составить программу для вычисления суммы ряда:
![]()
Сумму ряда вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа (0<<0,0001).
№ 4.9.
Составить
программу для вычисления члена an
последовательности a1,
a2,
…, образованной по закону
для которого выполняется условие an–an-1<,
причем n — номер члена последовательности (n2),
— заранее заданное положительное число.
№ 4.10. Написать программу для вычисления члена bn последовательности b1, b2, …, образованной по закону
![]()
для которого выполняется условие bn–bn-1<,
где n — номер элемента последовательности (n2);
— заданное положительное число.
Циклы с параметром
№ 4.11. Написать программу для вычисления суммы S=S+1/i, где i=1, 2,..., N.
№ 4.12. Написать программу для вычисления произведения первых N натуральных чисел.
№ 4.13. Написать программу для вычисления dx=h*h/(2*S), при значениях: 100 S 1000 м.
№ 4.14. Написать программу для вычисления суммы S из значений Y=X*X*X, где X задан в интервале от N1 до N2, где N1 и N2 — натуральные числа.
№ 4.15. Написать программу для вычисления выражения Y=N!.



