Bыражение, управляющее повторным выполнением заданного оператора в операторе repeat /повторить/, должно быть булевского типа. Последовательность операторов, заключенная между зарезервированными словами repeat и until /пока/, выполняется повторно до тех пор, пока управляющее выражение не примет значение true /истина/. В отличие от оператора while тело оператора repeat выполняется по крайней мере один раз, так как определение значения условного выражения производится в конце цикла.
Пример: составить программу для расчета значений функции y = exlgx на отрезке [a, b] и шагом dx с использованием оператора цикла с постусловием.
x = x + dx
y = exlgx
X = Xн
x:=xn;
Repeat
y:=exp(x)*ln(x)/ln(10);
writeln(‘x=’, x:6:3, ‘y=’, y:8:3);
x:=x+dx;
Until (x>xk);
нет да
ПРИМЕР НАПИСАНИЯ ПРОГРАММЫ
Пусть дана задача, состоящая из четырех частей:
1) вычислить элементы квадратной матрицы А, если
sin5i + cos 10j
aji = ----------------------;
tgij
2) из матрицы А получить вектор Х, если Хi – скалярное произведение побочной диагонали на i –й столбец;
3) упорядочить элементы строк матрицы А по убыванию;
4) вычислить значение функции
xi + xn-i+1
Y = --------------- .
Xn/2
Алгоритм решения каждой части задачи выполнить в виде отдельной подпрограммы.
Текст программы и результаты вычислений при n=6 приведены ниже.
program primer;
{-------------------- раздел описания типов -----------------}
type Vect = array[1..10] of real;
Matr = array[1..10,1..10] of real;
{------------------- раздел описания переменных ---------}
Var Dev : text;
Kanal : string;
i, j, n : integer;
Y : real;
A : matr;
X : vect;
{------------------- раздел описания подпрограмм ------- }
{------------------------ часть первая -----------------------------}
procedure MATRICA(N:integer;var A:matr);
var i, j: integer;
Begin
for j:=1 to n do
for i:=1 to n do
A[j,i]:=(sin(5*i)+cos(10*j))/(sin(i*j)/cos(i*j));
end;
{---------------------- часть вторая -------------------------------}
Procedure VECTOR (N: integer; A: matr; var X:vect);
var i, j: integer;
Begin
for j:=1 to n do begin
X[j]:=0.0;
for i:=1 to n do
X[j]:=x[j]+A[i,j]*A[i,n-i+1]; end;
end;
{--------------------- часть третья --------------------------------}
Procedure PORJADOK(N:integer; var A:matr);
var i,j, k, k1: integer;
s : real;
Begin
for k:=1 to n do begin
for i:=1 to n-1 do begin
s:=A[k,i]; k1:=i;
for j:=i+1 to n do
if s<A[k,j] then begin
s:=A[k,j];
k1:=j; end;
A[k,k1]:=A[k,i];
A[k,i]:=s;
end; end;
end;
{-------------------- часть четвертая ------------------------------}
FUNCTION FUNC(N: integer; X:Vect):Real;
var i, n1 : integer;
s : real;
Begin
s:=0.0; n1:=n div 2;
for i:=1 to n do
s:=s+(x[i]+x[n-i+1])/x[n1];
func:=s;
end;
{-------------------- ОСНОВНАЯ ПРОГРАММА ------------------------}
Begin
write('Kanal=');
Readln(Kanal);
Assign(dev, kanal);
Rewrite(dev); write('N=');
Readln(n);
MATRICA(N,A); {вызов процедуры MATRICA}
writeln(dev,' матрица А: ');
for j:=1 to n do begin {начало вывода матрицы}
for i:=1 to n do
write(dev,a[i,j]:10:2);
writeln(dev); end; {конец вывода матрицы}
writeln(dev); {перевод строки}
VECTOR(N,A,X); {вызов процедуры VECTOR}
writeln(dev,' Элементы вектора Х: ');
for i:=1 to n do {начало вывода вектора}
write(dev, x[i]:10:2); {конец вывода вектора}
writeln(dev);
PORJADOK(N,A); {вызов процедуры PORJADOK}
writeln(dev,' Упорядоченная матрица:');
for i:=1 to n do begin {начало вывода упорядоченной матрицы}