Перестановка элементов массива
Перестановка двух элементов
Пример 1
Поменять местами два элемента массива А с заданными координатами (номерами строки и столбца).
Решение
Можно эту задачу решить несколькими способами. Первый способ аналогичен перестановке элементов в одномерном массиве, когда в процедуру передаются индексы элементов и массив, в котором надо их поменять. Тогда процедура может быть такой:
Program Example_124;
Procedure Swap1(k1, l1, k2, l2: Integer;
Varx: dmyarray);
Var c: Integer;
Begin
c:=x[k1, l1]; x[k1, l1]:=x[k2,l2];
x[k2,l2]:=c;
End;
Второй способ. Вспомним процедуру Swap, которая меняет местами значения двух целых переменных.
Program Example_125;
Procedure Swap(Varx, у: Integer);
Var z: Integer;
Begin
z:=x; x:=y; y:=z;
End;
А теперь обратимся к ней, передавая данные элементы: Swap(A[k1, l1], A[k2, l2]).
Рассмотрим задачу о перестановке двух столбцов (строк), так как многие задачи используют это действие.
Пример 2
Поменять местами столбцы с номерами l1 и l2. Эту задачу также можно решить несколькими способами. Составим процедуру, в которую будем передавать номера столбцов, и массив, в котором надо их переставить. Кроме того, добавим проверку корректности ввода данных номеров, так как если столбца с данным номером нет, то и переставлять ничего не надо. В самой процедуре можно использовать, например, процедуру Swap
Program Example_126;
Procedure Swap2(l1, l2: Integer;
Var x: dmyarray);
Var i: Integer;
Begin
If (l1<1) Or (l1>m)) Or (l2<1)
Or (12>m)) Then
Writeln ('Ввод неправильный')
Else
For i:=1 To m Do
Swap(x[i, l1], x[i, l2]);
End;
Если применять первую процедуру Swap1, то после проверки правильности ввода данных будет такое обращение:
For i:=1 То m Do
Swap1(i, l1, i, l2, x);
СТРОКОВЫЙ ТИП ДАННЫХ
Описание
Строкой называется последовательность заданной длины, состоящая из символов.
Строки (переменные типа String) могут быть объявлены, например, следующим образом:
Var Str1: String[30]; Str2: String;
При объявлении строковой переменной в квадратных скобках может указываться длина строки. Если длина строки не указана, то она принимается равной 255. Максимальная длина строки также равна 255. В данном случае в первой строке может содержаться максимум 30 символов, а во второй − 255. Надо заметить, что строка похожа на одномерный массив символов: она имеет определенную длину (не больше некоторого числа), к каждому символу можно обратиться по его номеру (как в массиве) – Str1[i] − это обращение к i−му элементу строки Str1.
Переменные типа String выводятся на экран посредством стандартных процедур Write и Writeln и вводятся с помощью стандартных процедур Readln и Read. To есть вводятся и выводятся не поэлементно, как массивы, а целиком.
Примечание. Если при вводе задать символов больше, чем максимально допустимо, то лишние символы будут проигнорированы.
Операции со строками
В Паскале имеется два основных способа обработки переменных типа String. Первый способ предполагает обработку всей строки как единого целого, т.е. единого объекта. Кроме того (это второй способ), можно рассматривать строку как составной объект, состоящий из отдельных символов, то есть элементов типа Char, которые при обработке доступны каждый в отдельности.
Склеивание
Под склеиванием понимается последовательное объединение нескольких строк.
Пример
Var Str1, Str2, Str3: String[20];
Str1:='y Егорки';
Str2:='всегда отговорки';
Str3:=Str1+' '+Str2;
Строка Str3 имеет значение 'У Егорки всегда отго'. В данном примере максимальная длина строки Str3 равна 20 символам, поэтому будут взяты только первые 20 символов суммы строк, а остальные рассматриваться не будут. Паскаль позволяет выполнять операции объединения (сцепления) нескольких строк в процессе их присвоения какой-либо переменной: Str3:= 'У Егорки '+' всегда '+' отговорки'. В результате такой операции в переменной Str3 будет то же самое содержимое, что и в предыдущем примере.
Примечание. "Склеить" строки можно также при помощи функции
Concat(Str1, Str2,..., StrN).
Сравнение
Паскаль позволяет выполнять операции сравнения двух строк. Сравнение происходит посимвольно слева направо: сравниваются коды соответствующих символов до тех пор, пока не нарушится равенство или не кончится одна из строк (или обе сразу), при этом сразу делается вывод о знаке неравенства. Две строки называются равными, если они равны по длине и совпадают посимвольно.
Пример
'Balkon'<'balkon'(Ord(' B' )<Ord('b'));
'balkon'>'balken'(Ord('o')>0rd('e')) ;
'balkon'>'balk' (длина первой строки больше);
'кошка '>'кошка' (длина первой строки больше);
'кот'='кот' (равны по длине и совпадают посимвольно).
Можно использовать любые операции отношения (>, <, =, <>, >=, =<) и их комбинации в условных операторах. Их результат − это одно из двух значений: True или False.
Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа Char.