.RU

for := to - Лабораторная работа 1


for

:=

to

do


begin



end;


организует повторение последовательности операторов при изменении значения счетчика от начального до конечного, с шагом «единица». Вначале счетчику присваивается начальное значение. После каждого выполнения тела цикла значение счетчика увеличивается на единицу. При достижении счетчиком конечного значения операторы выполняются в последний раз, и управление передается первому оператору стоящему после цикла.
Вторая форма оператора

for

:=

downto

do


begin



end;


организует повторение последовательности операторов при изменении значений счетчика от начального до конечного, с шагом « минус единица».
Если начальное и конечное значения равны, то тело цикла выполняется только один раз. Если начальное значение превышает конечное (для первой формы оператора) или начальное значение меньше конечного (для второй формы оператора), то тела цикла не выполняется ни разу.
Значение счетчика внутри цикла изменять нельзя.
Как правило, с помощью оператора for организуют циклы с заранее известным количеством повторений.

Пример 3.1.

Вычислить N! (1*2*3*…*N).
f:=1;

for

i:=1

to

n

do

f:=f*i;
Переменная целого типа i изменяется от 1 до n с шагом 1. Все значения i перемножаются для получения факториала числа n.

Пример 3.2.

Найти минимум функции y(x)=sin2(x)+4*cos(x) на интервале [-1; 1] с точностью =0,01.
n:=Round((b-a)/eps)+1; // Расчет количества шагов
x:=a; // Первая точка интервала
min:=sqr(sin(x))+4*cos(x); // В

качестве минимума принимается
// значение функции в начальной точке интервала

for

i:=1

to

n

do begin


x:=a+eps; // Переход к следующей точке
y:=sqr(sin(x))+4*cos(x); // Расчет значения функции
if yПроверка, является ли
// текущее значение y минимальным

end

;
Минимум с точностью  находится путем перебора всех значений от a до b с шагом равным . В начале, в качестве минимума принимается значение функции в первой точке интервала. После этого перебираются все точки интервала c заданным шагом. Если текущее значение y меньше минимального, то оно принимается за минимум. Так как шаг перебора параметра x в данном примере не кратен 1, то использование оператора for нежелательно.
3.1.2. Организация цикла с помощью оператора repeat
Оператор

repeat



until

;
организует повторение операторов, помещенных между ключевыми словами repeat и until до тех пор, пока условие не примет значение истина (true). Так как условие проверяется после выполнения операторов цикла, то тело цикла будет выполняться хотя бы один раз.

Пример 3.3.

Вычислить N! (1*2*3*…*N).
i:=1; f:=1;

if

n>1

then


repeat


i:=i+1;
f:=f*i;

until

(i>=N);
Такой способ вычисления факториала менее удобен, чем c использованием оператора for. Для того, чтобы при n<2 не выполнялось тело цикла введена проверка.

Пример 3.4.

Найти минимум функции y(x)=sin2(x)+4*cos(x) на интервале [-1; 1] с точностью =0,01.
x:=a;
min:=sqr(sin(a))+4*cos(a);

repeat


x:=x+eps;
y:=sqr(sin(x))+4*cos(x);

if

ythen min:=y;

until

(x>=b);
Данный алгоритм более удобен, чем рассмотренный в примере 3.2.
3.1.3. Организация цикла с помощью оператора while
Оператор

While

do begin



end;


организует повторение операторов, помещенных между begin и end, до тех пор, пока условие на примет значение ложь (false).
В отличии от оператора repeat, если условие будет равно false тело цикла не будет выполнено ни разу.

Пример 3.5.

Вычислить N! (1*2*3*…*N).

while

(ido begin
i:=i+1;
f:=f*i;

end

;
Такой способ вычисления факториала менее удобен, чем c использованием оператора for.

Пример 3.6.

Найти минимум функции y(x)=sin2(x)+4*cos(x) на интервале [-1; 1] с точностью =0,01.
x:=a;
min:=sqr(sin(a))+4*cos(a);

while

(xdo begin
x:=x+eps;
y:=sqr(sin(x))+4*cos(x);

if

ythen min:=y;

end;


Данный алгоритм более удобен, чем рассмотренный в примере 3.2.

3.2. Организация вложенных циклов


Циклы могут быть вложены друг в друга.

Пример 3.7.

Вычислить таблицу значений функции на интервале [a; b] с шагом h.
x:=a;

repeat


y:=0;

for

i:=1

to

10

do

y:=i*sin(i)/sqr(x);
Memo1.Lines.Add(' При x='+FloatToStrF(x,ffFixed,4,1)+
' y='+FloatToStrF(y,ffFixed,8,3));
x:=x+h;

until

(x > b+h);

^ 3.3. Организация прерывания цикла


Иногда необходимо прервать выполнение тела цикла до выполнения условия окончания. Можно использовать следующие процедуры и функции:

Continue

– прерывает выполнение текущей итерации, и передает управление следующей итерации.

^ Break

– прерывает тело любого цикла и передает управление следующему за циклом оператору.

Exit

– прерывает не только тело цикла, но и прекращает выполнение процедуры или функции, в которой размещен этот цикл.

Abort

– прерывает не только тело цикла, но и прекращает выполнение блока, в которой размещен этот цикл. Данная процедура генерирует «молчаливое» исключение, не связанное с сообщением об ошибке.

^ 3.4. Алгоритмы, использующие рекуррентную последовательность


Последовательность чисел а0, а1, а2, ..., аn называется рекуррентной, если каждый последующий ее член выражается через один или несколько предыдущих. Если для получения следующего значения последовательности требуется только один предыдущий элемент, то это последовательность первого порядка. Для нахождения всех членов такой последовательности достаточно задать начальный элемент а0.

Пример 3.8.

Вычислить сумму .
Вначале составления алгоритма необходимо получить рекуррентную формулу. Для получения формулы рассмотрим значение слагаемого при различных значениях k: при при при и т.д. Видно, что на каждом шаге слагаемое дополнительно умножается на . Исходя из этого формула рекуррентной последовательности будет иметь вид . Полученная формула позволяет избавиться от многократного вычисления факториала и возведения в степень. Текст программы представлен ниже.
s:=0; // ^ Начальное значение суммы
a:=1; // Начальное значение для вычисление очередного
// члена рекуррентной последовательности

for

k:=1

to

100

do begin


a:=-a*x/k; // Вычисление члена рекуррентной последовательности
s:=s+a; // Суммирование всех слагаемых

end

;

Пример 3.9.

Вычислить сумму .
Анализируя формулу можно сделать вывод, что получить рекуррентную зависимость для sin(x) достаточно сложно, поэтому будем считать функцию sin(x) нерекуррентной частью и рассчитывать отдельно. Получим рекуррентную зависимость для оставшийся формулы . Рассмотрим значение слагаемого при различных значениях k: при при при при и т.д. Видно, что на каждом шаге слагаемое дополнительно умножается на . Исходя из этого формула рекуррентной последовательности будет иметь вид . Текст программы представлен ниже.
s:=sin(x);
a:=1;

for

k:=1

to

100 do

begin


a:=-a*sqr(x)/(2*k*(2*k-1));
s:=s+a*sin(x);

end

;
При расчете удобно начинать расчет не с нулевого элемента, а с первого. Значение суммы в нулевом элементе рассчитывается до начала цикла (s:=sin(x)). Нерекуррентная часть добавляется при суммировании (s:=s+a*sin(x)).

^ 3.5. Пример написания программы


Задание: написать и отладить программу, которая выводит таблицу значений функции и ее разложения в ряд для х изменяющихся в интервале от xN до xK c шагом h.
Панель диалога представлена на рис. 3.1.

Рис. 3.1
Текст программы приведен на Листинге 3.1.
Листинг 3.1

unit

Unit3;

interface


uses


Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math;

type


TForm1 =

class

(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;

procedure

FormCreate(Sender: TObject);

procedure

Button1Click(Sender: TObject);

private


{ Private declarations }

public


{ Public declarations }

end;


var


Form1: TForm1;

implementation


{$R *.dfm}

procedure

TForm1.FormCreate(Sender: TObject);

begin


Memo1.Clear;
Edit1.Text:='0,1';
Edit2.Text:='1';
Edit3.Text:='0,1';
Edit4.Text:='30';

end;


procedure

TForm1.Button1Click(Sender: TObject);

var

k, n : integer;
a,b,h,s,x,y : extended;

begin


Memo1.Clear;
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
h:=StrToFloat(Edit3.Text);
n:=StrToInt(Edit4.Text);
x:=a;

repeat


s:=x;
a:=x;

for

k:=1

to

n

do begin


a:=-a*sqr(x)/(2*k*(2*k-1));
s:=s+a*sin(x);

end;


y:=sinh(x);
Memo1.Lines.Add(' при x='+FloatToStrF(x,ffFixed,4,2)+' y='+
FloatToStrF(y,ffFixed,8,4)+' s='+FloatToStrF(y,ffFixed,8,4));
x:=x+h;

until

(x>b+h/2); // Добавляется h/2 для вывода последнего элемента

end

;

end

.

^ 3.6. Индивидуальные задания


По указанию преподавателя выберите вариант задачи. Нарисуйте схему алгоритма. Спроектируйте панель диалога и напишите текст программы.
Вывести на экран таблицу значений функции ^ Y(x) и ее разложения в ряд S(x) для x изменяющихся от xn до xk с заданным количеством шагов n (). Близость значений S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x).
После написания программы и исправления ошибок трансляции изучите средства отладки программ (см. прилож.), для чего установите курсор на первый оператор и нажмите клавишу F4. После этого, нажимая клавишу F7, выполните пошагово программу и проследите, как меняются все переменные в процессе выполнения.

Таблица 3.1





S(x)

n

Y(x)

1

2

3

4

5

6

1

0.1

1


100


2

0.1

1


180


3

0.1

1


250


4

0.1

1


200


5

0.1

0.7


300


6

0.1

1



100


7

0.2

1


250


8

0.1

0.7


300


9

0.3

1


260


10

0.1

0.5


60


Окончание табл. 3.1

1

2

3

4

5

6

11

0.2

1


190


12

0.1

1


220


13

-2

-0.1


300


14

0.2

0.8


250


15

0.1

0.8


120


2010-07-19 18:44 Читать похожую статью
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • © Помощь студентам
    Образовательные документы для студентов.