Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi_2013.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.65 Mб
Скачать

Операторы передачи управления

Операторы передачи управления принудительно изменяют порядок выполнения команд.

Оператор

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;