Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 22:12, курс лекций
Delphi – это среда быстрой разработки, в которой в качестве языка про-граммирования используется язык Delphi. Язык Delphi – строго типизиро-ванный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal. В настоящее время программистам стала доступна очередная версия пакета Delphi – Borland Delphi 7 Studio.
В языке ObjectPascal основной программной единицей является подпрограмма. Различают два вида подпрограмм: процедуры и функции. Отличие функции от процедуры заключается в том, что с именем функции связано значение, поэтому имя функции можно использовать в выражениях. Это значение нужно присвоить переменной result, которая нигде не описывается.
В качестве примера приведена программа перевода фунтов в килограммы, использующая функцию, окно ввода и окно вывода (Листинг 4).
Форма имеет вид, показанный на рис. 10.
// нажатие кнопки Выполнить Листинг 4
procedure TForm1.Button1Click(Sender: TObject);
function FuntToKg(f:real):real;
const
K=0.4095; // 1 фунт равен 409,5 г.
begin
result:=f*K;
end;
var
funt,kg:real;
s:string;
begin
s:=InputBox('Фунты-килограммы'
funt:=StrToFloat(s);
kg:=FuntToKg(funt);
ShowMessage(FloatToStr(kg));
end;
Самостоятельно создайте аналогичную программу для вычисления в системе СИ веса тела (Р), имеющего массу m. Используйте формулу P = m*g.
Выбор в точке разветвления алгоритма очередного шага программы может быть реализован при помощи инструкций if и case. Инструкция if позволяет выбрать один из двух возможных вариантов, инструкция case – один из нескольких.
Эта инструкция позволяет выбрать один из двух возможных вариантов развития программы. Выбор осуществляется в зависимости от выполнения условия.
В общем виде инструкция if записывается так:
if условие
then
begin
{ здесь инструкции, которые надо выполнить, если условие истинно }
end
else
begin
{ здесь инструкции, которые надо выполнить, если условие ложно }
end;
Если между словами begin и end находится только одна инструкция, то слова begin и end можно не писать.
Если какое-либо действие должно быть выполнено только при выполнении определенного условия и пропущено, если это условие не выполняется, то слово else и следующие за ним инструкции можно не писать.
В качестве примера рассмотрим программу вычисления стоимости междугороднего телефонного разговора. Стоимость разговора в выходные дни ниже, чем в обычные.
Программа, текст которой приведен
в листинге 5, запрашивает длительность
разговора и день недели, а затем вычисляет
стоимость разговора.
В субботу и в воскресенье стоимость уменьшается
на величину скидки.
Цена минуты разговора и величина скидки
задаются в тексте программы как константы.
На рис. 11, а приведена блок-схема решения задачи. Вид диалогового окна приведен на рис. 11, б.
// нажатие кнопки Вычислить Листинг 5
procedure TForm1.Button1Click(Sender: TObject);
const
pay=0.15; // цена одной минуты разговора (руб.)
discount=0.2; // скидка 20%
var
t,s:real; // время и стоимость разговора
day:integer; // номер дня недели
begin
t:=StrToFloat(Edit1.Text);
day:=StrToInt(Edit2.Text);
s:=pay*t; // стоимость разговора
{Если день - суббота или воскресенье, то уменьшить стоимость на величину скидки}
if (day=6) or (day=7) then s:=s*(1-discount);
label3.caption:='К оплате '+FloatToStr(s)+' руб.';
end;
Часто в программе необходимо реализовать выбор более чем из двух вариантов. В этом случае можно внутри инструкции if поместить еще одну такую инструкцию. Например, известно, что для каждого человека существует оптимальное значение веса, которое может быть вычислено по формуле: Рост(см) – 100. Напишите программу, которая запрашивает вес и рост, вычисляет оптимальное значение, сравнивает его с реальным весом и выводит соответствующие сообщения. На рис. 12 приведен алгоритм программы. На рис. 13 приведено диалоговое окно. Попробуйте сначала не заглядывать в листинг 6.
// Щелчок на кнопке Вычислить Листинг 6
procedure TForm1.Button1Click(Sender: TObject);
var
w,h,opt,d:real;
begin
w:=StrToFloat(Edit1.Text); // вес
h:=StrToFloat(Edit2.Text); // рост
opt:=h-100;
d:=w-opt;
if d=0 then label3.Caption:='Вы в хорошей форме'
else
if d<0 then label3.Caption:='Вам надо поправиться на '+
else label3.Caption:='Вам надо похудеть на '+
end;
В предыдущем примере, в программе контроля веса, множественный выбор был реализован при помощи вложенных одна в другую инструкций if. Такой подход не всегда удобен, особенно в том случае, если количество вариантов хода программы велико.
В этом случае используют инструкцию case, которая позволяет эффективно реализовать множественный выбор. В общем виде она записывается следующим образом:
Case Селектор of
Список1: begin
{инструкция 1}
end;
Список2: begin
{инструкция 1}
end;
………………………………………
СписокN: begin
{инструкция 1}
end;
else
begin
{инструкция 1}
end;
end;
где:
Синтаксис инструкции case позволяет не писать else и соответствующую последовательность инструкций. В этом случае, если значение выражения Селектор не совпадает ни с одной константой из всех списков, то выполняется следующая за case инструкция программы.
В качестве примера рассмотрим программу, которая пересчитывает вес из фунтов в килограммы. Программа учитывает, что в разных странах фунт «весит» по-разному. Например, в России фунт равен 409,5 граммов, в Англии – 453,592 грамма, в Германии, Дании и Исландии – 500 граммов.
В диалоговом окне программы, изображенном на рис. 14, для выбора страны используется список Страна. Для выбора названия страны используется список – компонент ListBox. Значок компонента ListBox находится на вкладке Standard (Рис. 15). Список стран можно написать в окне String List Editor (Рис. 16, б), которое откроется, если щелкнуть на кнопку с тремя точками в свойстве Items (Элементы списка) (Рис. 16, а).
Кроме этого компонент ListBox имеет другое важное свойство – ItemIndex (Номер выбранного элемента списка. Номер первого элемента списка равен нулю. Если ни один из элементов списка не выбран, то значение свойства равно минус единице.).
Список может быть сформирован и во время работы программы.
Текст программы приведен в листинге 7.
procedure TForm1.Button1Click(Sender: TObject); Листинг 7
var
funt,kg,k:real;
begin
case ListBox1.ItemIndex of
0: k:=0.4095; // Россия
1: k:=0.453592; // Англия
2: k:=0.56001; // Австрия
3..5,7:k:=0.5; // Германия, Дания, Исландия, Нидерланды
6: k:=0.31762; // Италия
end;
funt:=StrToFloat(Edit1.Text);
kg:=funt*k;
label4.caption:=Edit1.text+' ф. - это '+
FloatToStrF(kg,ffFixed,6,3)+' кг.';
end;
Переделайте программу стоимости междугороднего разговора, используя инструкцию case и компоненту ListBox. Внесите изменения в исходные данные: скидка в субботу – 10%, в воскресенье – 20%.
Если вы затрудняетесь, посмотрите листинг 8. На рис. 16' показано диалоговое окно в ходе составления программы и в процессе ее работе.
Сохраните переделанную программу под другим именем.
// нажатие кнопки Вычислить Листинг 8
procedure TForm1.Button1Click(Sender: TObject);
const pay=0.15; // цена одной минуты разговора (руб.)
var t,s,k:real; // время разговора, его стоимость, скидка
begin
t:=StrToFloat(Edit1.Text); // время разговора
case ListBox1.ItemIndex of // день недели
0..4: k:=0; // Рабочий день
5: k:=0.1; // Суббота
6: k:=0.2; // Воскресенье
end;
s:=pay*t*(1-k);
label4.caption:=FloatToStrF(s,
end;
Рис. 16'
Контрольные вопросы к лекции 3
Алгоритмы решения многих задач являются циклическими, т.е. для достижения результата определенная последовательность действий должна быть выполнена несколько раз. В программе цикл может быть реализован при помощи инструкций for, while и repeat.
В общем виде инструкция for записывается следующим образом:
For <счетчик>:=<начальное значение> to <конечное значение> do
begin
{здесь инструкции,
которые надо выполнить
end;
где <счетчик> – переменная целого типа, изменяющаяся от <начального значения> до <конечного значения> включительно.
Если начальное значение счетчика больше конечного, то последовательность операторов между begin и end не будет выполнена ни разу. После каждого выполнения инструкций тела цикла счетчик циклов увеличивается автоматически. Переменную <счетчик> можно использовать внутри цикла (но не изменять без надобности).
Рассмотрим программу, которая вычисляет сумму первых 10 элементов ряда: 1 + 1/2 + 1/3 +… +1/i +… Диалоговое окно программы показано на рис. 17.
Здесь появился новый компонент Panel, значок которого расположен на вкладке Standard (Рис. 18). Этот компонент служит только для украшения диалогового окна и не несет никакой функциональной нагрузки. Компоненты Edit1 и Panel2 расположены поверх компонента Panel1. Компонент Label3 для вывода результата расположен поверх компонента Panel2.
Текст программы приведен в листинге 9.
procedure TForm1.Button1Click(Sender: TObject); Листинг 9
var
i,n:integer;
s:real;
begin
n:=strToInt(Edit1.Text);
s:=0;
for i:=1 to n do s:=s+1/i;
label3.Caption:='Сумма ряда равна '+FloatToStr(s);
end;
Если в инструкции for вместо слова to записать downto, то значение счетчика будет не увеличиваться, а уменьшаться. В этом случае <начальное значение> должно быть больше <конечного значения>.
Инструкция while используется в том случае, если некоторую последовательность действий надо выполнить несколько раз, причем необходимое число повторений во время разработки программы неизвестно и может быть определено только во время работы программы.
В общем виде инструкция while записывается следующим образом:
while условие do
begin
// здесь инструкции, которые надо выполнить несколько раз
end;
где условие – выражение логического типа, определяющее условие выполнения инструкций цикла.
Для того чтобы инструкции цикла, которые находятся между словами begin и end были выполнены хотя бы один раз, необходимо, чтобы перед выполнением инструкции while значение выражения условие было истинно. Для того чтобы цикл завершился, нужно, чтобы последовательность инструкций между словами begin и end влияла на значение выражения условие (изменяла значения переменных, входящих в выражение условие).
Информация о работе Курс лекций по дисциплине "Программирование и комьпютеры"