Составные типы данных. Одномерные массивы
End.
Begin
Begin
Var
Const
Прерывание циклов
End.
Begin
Begin
Var
Цикл с предуловием
End.
Begin
Repeat
Begin
Var
End.
Repeat
Begin
Var
Repeat
<оператор 1>;
<оператор 2>;
…
<оператор n>;
until <логическое выражение>;
Цикл выполняется хотя бы один раз.
Пример. Программа выводит на печать коды символов, пока не будет введен символ ‘*’
Program CalcSymbolCode;
uses crt;
var
sym:char;
begin
clrscr;
repeat
writeln(‘Введите символ (* - выход)’);
readln(sym); {read(sym) будет читать коды 13 и 10,}
{связанные с нажатием Enter}
Writeln(‘Символ ‘, sym,’ имеет код ‘, ord(sym));
until sym=’*’;
readln;
readln;
end.
Пример. Вычисление с точностью , использую рекуррентную формулу.
exp(x*ln(n)) – возведение х в степень n
Рекуррентная формула – выражение одного элемента последовательности через значение предыдущих элементов.
program nroot;
uses crt;
n:integer;
y,x,d,r:real;
clrscr;
writeln(‘Введите x, n, e’);
readln(x, n ,e);
d:=(x/exp((n-1)*ln(y)) – y/n;
y:=y+d;
until abs(d) < e ;
writeln(‘Корень равен‘, );
readln;
Примеры на вложенные циклы.
Вычислить определенный интеграл
program integral;
i, n:longint;
a, b, c, h, x, int, int0:real;
writeln(‘Введите a,b,n,e’);
readln(a, b, n, e);
int:=0;
writeln(‘n=’,n); {контрольный вывод}
x:=a;
int0:=int;
h:=(b-a)/n;
int:=0;
for i:=1 to n do
int:=int+sinx;
x:=x+h;
end;
int:=int*h;
n:=n*2;
until abs(int-int0)<=e;
writeln(‘int=’, int);
while <условие> do <оператор>
Выполняется 0 или более раз. Условие должно быть максимально простым.
Пример.
Выведем рекуррентную формулу.
program mycos;
{вычисление х с заданной точностью е}
s, x, y, t, e ,f:real;
writeln(‘Введите x, e’);
readln(x,e);
S:=1;
t:=1;
n:=1;
while abs(f)>e do
f:=-sqr(x)/((2*n-1)*2*n)
t:=t*f;
S:=S+t;
end;
write(‘x=’,x,’cosx=’,s);
В некоторых случаях необходимо прерывать цикл раньше, чем он выполнится или прервать очередную итерацию и перейти к следующей. Это всегда можно сделать, усложнив условия или добавив дополнительные операторы ветвления в тело цикла.
В ВР break, continue.
break – завершает выполнение цикла, внутри которого записана
continue – выполняет переход к следующей итерации.
Цикл аналогичен предыдущему, но может никогда не завершиться из-за ограниченной сходимости ряда. Поэтому, необходимо предусмотреть аварийный выход.
const MaxIter=200
n > MaxIter – прерывание цикла
program Hypercos;
MaxIter=200;
n:integer;
done:boolean;
s, x, y, t, e, f:real;
writeln(‘Введите x, n’);
readln(x,e);
s:=1;
t:=1;
n:=1;
done:=true;
while abs(t)>e do
f:=sqr(x/((2*n-1)*2*n);
t:=t*f;
S:=S+t;
n:=n+1;
if n>MaxIter then begin
writeln(‘Ряд расходится’);
done:=false;
break;
end;
end;
if done then writeln(‘x=’,x,#13#10,’ch(x)=’,s,’n=’,n-1);
if n<=MaxIter then continue else begin
writeln(‘Ряд расходится’);
done:=false;
break;
end;
ЛЕКЦИЯ №10
Составные или сложные типы состоят из компонент(элементов) других типов. Поэтому при рассмотрении составных типов указывают тип компонент и метод их объединения для получения составного типа.
Регулярный тип (массив) – представляется в виде фиксированного числа однотипных элементов, которые располагаются в смежных ячейках памяти.
Местоположение элементов в массиве называется индексом.
Примеры:
Вектор одномерный массив:
Матрица (двумерный массив
Регулярный тип определяется пользователем
<регулярный тип>::={<тип индекса>,{<тип индекса>},] of <тип элемента>;
<тип элемента> -любой, кроме файлового. Также может быть массив.
<тип индекса>::=|перечисляемый |диапазонный|char|boolean