1 семестр сессия / Bilet12
.docБилет №12. Структурный тип массив. Обработка массивов.
Для массивов допустим оператор присваивания в форме:
<переменная1-массив> := < переменная2 -массив>;
где: левая и правая части содержат переменные массивов только одного типа.
Такие операторы присваивания могут использоваться для копирования одного массива в другой. Однако над массивами не определены отношения <,>,<=,>=,=.<>. Кроме того, в Турбо Паскале нельзя использовать выражения над массивами.
За исключением приведенного выше оператора присваивания, обработка массивов осуществляется путем обработки его элементов. Для этого следует использовать доступ к элементам через индексы. Например, для индексных переменных допустим оператор присваивания вида:
<переменная-массив> [<индексная переменная>] := < выражение >;
где: < выражение > должно быть согласовано по типу с типом элементов массива. Индексированные имена могут входить в состав выражений соответствующего типа также как простые имена.
Важным средством обработки массивов являются циклы. Хотя для обработки массивов можно использовать описанные ранее итерационные циклы, обычно более удобными являются циклы с параметром.
В Турбо Паскале имеются две разновидности циклов с параметром (циклов for):
for <параметр> := < нач.зн.> to <кон.зн.> do <оператор тела цикла>;
for <параметр> := <кон.зн.> downto <нач.зн.> do <оператор тела цикла>;
Параметром цикла for может быть переменная любого порядкового типа.
< нач.зн.> и <кон.зн.> - выражения того же типа, что и параметр, определяющие границы изменения параметра в данном цикле.
<оператор тела цикла> - любой оператор Турбо Паскаля.
Цикл с параметром (первая его разновидность) выполняется следующим образом: вначале вычисляются < нач.зн.> и < кон.зн.> и осуществляется присваивание параметру цикла < нач.зн.>. Проверяется, не превышает ли параметр значения <кон.зн.> (т.е. выполняется сравнение <параметр> < <кон.зн.>), и если не превышает, то выполняется тело цикла, после чего параметру присваивается следующее по порядку значение (т.е. succ(< нач.зн.>)) и цикл повторяется. Если параметр превысил <кон.зн.>, цикл завершается (осуществляется переход к следующему за циклом оператору программы).
Таким образом, цикл for повторяет выполнение оператора тела цикла несколько раз с разными значениями параметра от начального значения до конечного значения.
Вторая разновидность цикла с параметром отличается при выполнении лишь тем, что параметр изменяется в обратном направлении - от конечного значения к начальному. Выход из этого цикла осуществляется, если значение параметра меньше начального значения.
При использовании цикла for желательно, чтобы параметр цикла, выражения <нач.зн.> и <кон.зн.> не изменяли свои значения при выполнении тела цикла ( а также <нач.зн.> и <кон.зн.> не имели зависимости от параметра цикла). Это гарантирует завершение цикла за конечное число шагов и ясную для понимания структуру цикла.
Хотя часто цикл for используют с целочисленным параметром, полезно помнить, что он может быть использован с параметром любого порядкового типа, что придает ему значительно большую гибкость, чем имеют циклы с параметром в других языках (например, в Фортране).
Задача 4.2.6(12)
program Project12;
type mas=array[1..4,1..5] of Integer;
var a:mas;
i,j,l1,l2,d1,d2,s:Integer;
procedure p(x:mas; e1,e2:Integer; var n,k:integer);
var j,max:Integer;
begin
max:=x[e1,1];
n:=e1;
k:=1;
for i:=e1 to e2 do
for j:=1 to 5 do
if x[i,j]>max then
begin
max:=x[i,j];
n:=i;
k:=j;
end;
end;
begin
for i:=1 to 4 do
for j:=1 to 5 do
read(a[i,j]);
p(a,1,2,l1,d1);
p(a,3,4,l2,d2);
s:=a[l1,d1];
a[l1,d1]:=a[l2,d2];
a[l2,d2]:=s;
Writeln;
for i:=1 to 4 do begin
for j:=1 to 5 do begin
write(a[i,j],' ');
end; writeln; end;
Readln;
end.