
- •Программирование в Delphi
- •Структура проекта Delphi
- •Данные в Delphi
- •Символьный тип данных
- •Целочисленный тип данных
- •Вещественный тип данных
- •Тип дата-время
- •Логический тип данных
- •Var переменные: новый_тип;
- •Var имя:(знач_1,знач_2,…);
- •Указатели
- •Операции и выражения
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Стандартные функции
- •Понятие алгоритма
- •Изображение алгоритма в виде блок-схемы
- •Оператор присваивания
- •Составной оператор
- •Условные операторы
- •Вывод сообщений
- •Обработка ошибок
- •Ораторы цикла
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с заданным числом повторений
- •Операторы передачи управления
Операторы передачи управления
Операторы передачи управления принудительно изменяют порядок выполнения команд.
Оператор
goto метка
где метка – идентификатор, применяют для безусловного перехода, он передает управление оператору с меткой:
метка: оператор;
Операторы break и continue используют только внутри циклов. Так оператор break осуществляет немедленный выход из циклов repeat, while, for и управление передается оператору, находящемуся непосредственно за циклом. Оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершена.
Оператор exit осуществляет выход из подпрограммы.
Оператор halt прекращает выполнение программы.
Задача. Составить таблицу значений функции y=3cos(x2) на отрезке [xn;xk] с шагом dx. Вывести на печать каждую вторую пару значений x и y. Найти среднее арифметическое ненулевых значений y.
Входные данные:
начальн. значение аргумента – xn,
конечн. значение аргумента – xk,
шаг изменения аргумента – dx.
Выходные данные:
множество значений X и Y;
S – среднее значение Y;
Вспомагательные переменные:
K – количество значений Y;
i – номер выводимых значений.
При сложении нескольких чисел необходимо накапливать результат в определенном участке памяти, каждый раз считывая из этого участка предыдущее значение суммы и прибавляя к нему следующее слагаемое.
S:=S+Y
Для выполнения первого оператора накапливания суммы из участка памяти необходимо взять такое число, которое не влияло бы на результат сложения. Т.е. перед началом цикла переменной, предназначенной для накапливания сумы, необходимо присвоить значение нуль: S:=0.
При вычислении количества значений практически происходит суммирование единиц. Поэтому, для выполнения первого оператора накапливания ячейка обнуляется, K=0. Далее, K:= K + 1.
procedure TForm1.btn3Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
mmo1.Lines.Clear;
edt1.Text:='';
edt2.Text:='';
edt3.Text:='';
end;
procedure TForm1.btn1Click(Sender: TObject);
var
xn,xk,dx:Real;
x,y:Real;
S:Real;
k,i:Integer;
kod1, kod2, kod3:integer;
begin
val(edt1.Text,xn,kod1);
val(edt2.Text,xk,kod2);
val(edt3.Text,dx,kod3);
if (kod1=0) and (kod2=0) and (kod3=0) then
begin
S:=0; k:=0; i:=0;
x:=xn;
mmo1.Lines.Add('Значения функции в заданных точках' );
while x<=xk do
begin
y:= 3*cos(Sqr(x));
i:=i+1;
if i mod 2=0 then
mmo1.Lines.Add('x='+
FloatToStrF(x,ffFixed,5,2)+
' y='+
FloatToStrF(y,ffFixed,7,2));
if y<>0 then
begin
S:=S+y;
k:=k+1;
end;
x:=x+dx;
end;
if k=0 then
MessageDlg('Ошибка!',
mtError,[mbOk],0)
else
MessageDlg('Среднее
значение функции'+chr(13)
FloatToStrF(S,ffFixed,5,2),
mtInformation,[mbOk],0)
end
else
begin
MessageDlg('Введите число!',mtWarning,[mbOk],0);
edt1.Text:='0.0';
edt2.Text:='0.0';
edt3.Text:='0.0';
end;
end;
Задача.
Составить таблицу значений функции
на отрезке [xn;xk]
с шагом dx.
Вывести на печать значения x
и y.
Найти произведение положительных
значений y,
сумму отрицательных значений y
и количество всех значений y.
Входные данные:
начальн. значение аргумента – xn,
конечн. значение аргумента – xk,
шаг изменения аргумента – dx.
Выходные данные:
множество значений X и Y;
S, P, K ;
При умножении нескольких чисел произведение накапливается в определенном участке памяти, например P.
Для выполнения первого оператора из участка памяти необходимо взять такое число, которое не влияло бы на результат умножения, т.е. единицу
P = 1.
Далее, из переменной P считывается предыдущее значение и умножается на следующее
P = P * y.
procedure TForm1.btn3Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
mmo1.Lines.Clear;
edt1.Text:='';
edt2.Text:='';
edt3.Text:='';
lbl4.Visible:=False;
lbl5.Visible:=False;
lbl6.Visible:=False;
edt4.Visible:=False;
edt5.Visible:=False;
edt6.Visible:=False;
mmo1.Visible:=False;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
xn,xk,dx:Real;
x,y:Real;
S,P:Real;
k:Integer;
kod1, kod2, kod3:integer;
begin
lbl4.Visible:=true;
lbl5.Visible:=true;
lbl6.Visible:=true;
edt4.Visible:=true;
edt5.Visible:=true;
edt6.Visible:=true;
mmo1.Visible:=true;
val(edt1.Text,xn,kod1);
val(edt2.Text,xk,kod2);
val(edt3.Text,dx,kod3);
if (kod1=0) and (kod2=0) and (kod3=0) then
begin
S:=0; k:=0; P:=1;
x:=xn;
mmo1.Lines.Add('Значения функции' );
while x<=xk do
begin
y:= Power(Sqr(Sin(x)),1/3);
mmo1.Lines.Add('x='+
FloatToStrF(x,ffFixed,5,2)+
' y='+
FloatToStrF(y,ffFixed,7,2));
if y>0 then
P:=P*y
else S:=S+y;
k:=k+1;
x:=x+dx;
end;
edt4.Text:=FloatToStrF(S,
ffFixed,7,2);
edt5.Text:=FloatToStrF(P,
ffFixed,7,2);
edt6.Text:=IntToStr(K);
end
else
begin
MessageDlg('Введите число!',mtWarning,[mbOk],0);
edt1.Text:='0.0';
edt2.Text:='0.0';
edt3.Text:='0.0';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
lbl4.Visible:=False;
lbl5.Visible:=False;
lbl6.Visible:=False;
edt4.Visible:=False;
edt5.Visible:=False;
edt6.Visible:=False;
mmo1.Visible:=False;
end;