Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Оператор цикла с заданным числом повторений




Блок-схема алгоритма

«Безусловный» циклический процесс реализован оператором

for параметр:=нач_зн to кон_зн do

оператор;

for парам:=кон_зн downto нач_зн do

оператор;

где оператор – любой оператор языка, параметр_цикла, а также диапазон его изменения (начальное_значение и конечное_значение) – переменные или выражения целочисленного или перечислимого типа.

Шаг цикла for всегда постоянный и равен интервалу между двумя ближайшими значениями типа параметра цикла.

В случае если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор:

for параметр:=нач_зн to кон_зн do

begin

оператор_1;

оператор_2;

.............

оператор_N;

end;

Алгоритм работы цикла for … do:

1. Параметру_цикла присваивается начальное_значение.

2. Если значение параметра_цикла превосходит конечное_значение, то цикл завершает свою работу. В противном случае выполняется п. 3.

3. Выполняется оператор.

4. Значение параметра_цикла изменяется на соответствующий шаг и осуществляется переход к п.2, и т.д.

Понятно, что этот алгоритм представляет собой цикл с предусловием.

Задача. Вывести значения функции на отрезке [0;p] с шагом 0.1.

Здесь количество повторений цикла явно не задано. Вычислим его:

В общем случае, если параметр цикла х принимает значения в диапазоне от xn до xk, изменяясь с шагом dх, тогда количество повторений тела цикла можно определить по формуле:

округлив результат деления до целого числа.

procedure TForm1.btn1Click(Sender: TObject);

var x,y:Real;

n,i: Byte;

Begin

n:=round((pi-0)/0.1)+1;

x:=0;

for i:=1 to n do

Begin

y:=Exp(Sin(x))*cos(x);

mmo1.Lines.Add(IntToStr(i)+

' x='+FloatToStr(x)+

'y='+floattostr(y));

x:=x+0.1;

end;

end;


Операторы передачи

Управления

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

Оператор

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 * i.

 

 

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;

 

 

ЗАДАЧА. Вычислить факториал числа N (N!=1×2×3 …× N).

Входные данные:N–целое число.

Выходные данные: factorial значение факториала числа N, произведение чисел от 1 до N, целое число.

Промежуточные переменные:

i– параметр цикла, целочисленная переменная, последовательно принимающая значения 2, 3, 4 и так далее до N.

 

procedure TForm1.Button1Click(Sender: TObject);

var i,N,factorial:integer;

begin

N:=StrToInt(Edit1.Text);

factorial:=1;

for i:=2 to N do

factorial:=factorial*i;

Label2.Caption:=

'N!='+IntToStr(factorial);

end;

ЗАДАЧА. Вычислить an, где n – целое положительное число.

Входные данные:

a – вещественное число

Выходные данные:

p (вещественное число) результат возведения вещественного числа a в целую положительную степень n.

Промежуточные данные:i – целочисленная переменная, принимающая значения от 1 до nс шагом 1, параметр цикла.

 

 

procedure TForm1.Button1Click(Sender: TObject);

var i,n:byte;a,p:real;

begin

a:=StrToFloat(Edit1.Text);

n:=StrToInt(Edit2.Text);

p:=1;

for i:=1 to n do

p:=p*a;

Label3.Caption:='a в степени n равно '+FloatToStr(p);

end;

 

 

ЗАДАЧА. Вычислить сумму натуральных четных чисел, не превышающих N.

Входные данные: N –целое число.

Выходные данные: S сумма четных чисел.

Промежуточные переменные: i – параметр цикла, принимает значения 2, 4, 6, 8 и так далее.

//Решение задачи с

//помощью цикла while:

procedure TForm1.Button1Click(Sender: TObject);

var i,N,S:byte;

begin

N:=StrToInt(Edit1.Text);

S:=0;

i:=2;

while i<=N do

begin

S:=S+i;

i:=i+2;

end;

Label2.Caption:='S= '+IntToStr(S);

end;

//Решение задачи

//с помощью цикла for:

procedure TForm1.Button1Click(Sender: TObject);

var i,N,S:byte;

begin

N:=StrToInt(Edit1.Text);

S:=0;

for i:=2 to N do

if i mod 2 = 0 then

S:=S+i;

Label2.Caption:='S= '+IntToStr(S);

end;

 

ЗАДАЧА. Дано натуральное число N. Определить К – количество делителей этого числа, не превышающих его (Например, для N =12 делители 1, 2, 3, 4, 6. Количество K =5).

Входные данные: N –целое число.

Выходные данные: целое число K количество делителей N.

Промежуточные переменные: i – параметр цикла, возможные делители числа N.

procedure TForm1.Button1Click(Sender: TObject);

var N,i,K:word;

begin

N:=StrToInt(Edit1.Text);

K:=0;

for i:=1 to N div 2 do

if N mod i= 0 then

K:=K+1;

Label2.Caption:='K= '+IntToStr(k);

end;

ЗАДАЧА. Дано натуральное число N. Определить, является ли оно простым. Натуральное число N называется простым, если оно делится нацело без остатка только на единицу и N. Число 13 – простое, так как делится только на 1 и 13, N= 12 не является простым, так как делится на 1, 2, 3, 4, 6 и 12.

Входные данные: N –целое число.

Выходные данные: сообщение.

Промежуточные данные: i – параметр цикла, возможные делители числа N.

procedure TForm1.Button1Click(Sender: TObject);

var N,i:integer;

Pr:boolean;

begin

N:=StrToInt(Edit1.Text);

Pr:=true;

for i:=2 to N div 2 do

if N mod i = 0 then

begin

Pr:=false;

break;

end;

if Pr then

MessageDlg('Число '+IntToStr(N)+

'простое.',MtInformation,[mbOk],0)

 

else

MessageDlg('Число '+IntToStr(N)+

' простым не является.',

MtInformation,[mbOk],0);

 

end;






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных