Строковые присваивания

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

Например: St1 := ‘Группа студентов’; St2 := Str1 + ‘первого курса’;

FIO := ‘Ахметов Е.К.’;

Если длина строки справа (результат) больше длины строки при описании (слева), то происходит отсечение лишних слов.

Строковые процедуры

1) Delete (St, Pos, N) – удаляет N символов из строки St, начиная с позиции Pos. Если Pos больше длины строки, то строка St не меняется; если Pos + N больше длины строки, удаляется конец.

Например: St := ‘город Астана’; Delete (St, 1, 6), тогда St = ‘Астана’.

2) Insert (S1, S2, Pos) - вставляет строку S1 в строку S2, начиная с позиции Pos. Если Pos больше длины S2, то результатом будет S2+S1 (сцепление двух строк); если результат длиннее, чем максимальная длина S2, то последние символы S1 в S2 не добавляются.

Например: St := ‘abcdefg’; Insert (‘xx’, St, 3), тогда St = ‘abcxxderg’.

3) Str (v, St) - преобразовывает численное значение v в строку символов и запоминает результат в строке St. Тип первого параметра – real или integer.

Например: i := 1234; Str (i, St), тогда St = ‘1234’,

x := 2.5E4; Str (x:9:0, Str), тогда St = ‘ 25000’.

4) Val (St, v, code) - преобразовывает значение строки St к целому или вещественному значению и запоминает его значение в переменной v. St не должна содержать незначащих пробелов в начале и в конце. Если во время преобразования информации ошибок не обнаружено, то code = 0, если ошибка обнаружена, то code будет содержать номер позиции первого ошибочного символа.

Например: St := ‘234’; Val (St, i, res), тогда i = 234, a res = 0,

St := ‘12x’; Val (St, i, res), тогда i = ?, a res = 3.

Строковые функции

1) Copy (St, Pos, N) - возвращает подстроку, содержащую N символов строки St, начиная с позиции Pos. Если Pos больше длины St, то Copy возвращает пустую строку; если Pos + N больше длины St, то Copy возвращает только последние символы. Если Pos больше 255 символов, выдается сообщение об ошибке.

Например: St := ‘Победа’;

Выражение Результат
Copy(St, 4, 3) ‘еда’
Copy(St, 5, 5) ‘да ’
Copy(St, 2, 4) ‘обед’

2) Concat (St1, St2 [,…, StN]) - выполняет сцепление строк St1, St2 и т.д. в том порядке, в каком они указаны в списке параметров. Длина результирующей строки меньше 255 символов (то же, что и +; включена в Turbo Pascal только для совместимости с другими компиляторами).

Например: St1 := ‘Строковые’; St2 := ‘ функции’;

Выражение Результат
Concat(St1, St2, ‘в TP’) ‘Строковые функции в TP’

3) Length (St) - вычисляет текущую длину строки в символах строки St.

Например: St := ‘123456789’;

Выражение Результат
Length (St)

4) Pos (S, T) - обнаруживает первое появление строки S в строке T. Результат целочисленный равен номеру позиции, где находится первый символ подстроки S. Если подстрока S в строке T не найдена, то результат равен нулю.

Например: S := ‘abcdef’;

Выражение Результат
Pos (‘de’, S)
Pos (‘h’, S)

Пример 7.5Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Посчитайте, сколько слов содержит данная строка.

program p75;

var s1 : string; i, j, k : integer;

begin writeln(‘Введите текст до точки’);

readln(s1);

j := Pos (‘.’, s1); {позиция точки}

if s1[j-1] = ‘ ‘ then k := 1 else k := 0;

s1 := Copy (s1, 1, j-1); {отрезаем от s1 текст до точки}

Repeat

i := Pos (‘ ‘, s1); {ищем пробел}

Delete (sq, 1, i); {отрезаем очередное слово и пробел}

if i <>1 then k := k + 1

until i = 0;

writeln(‘Количество слов k=’,k)

End.

Пример 7.6 Дана строка символов. Удалите из нее все знаки препинания.

program p76;

var str : string; d, i : integer; m : set of char;

begin m := [‘.’, ‘,’, ‘!’, ‘:’, ‘;’, ‘?’, ‘-‘];

writeln(‘Введите текст’);

readln(str);

d := Length (str);

writeln(‘Преобразованный текст’);

for i := 1 to d do

if not (str[i]) in m) then write(str[i]);

writeln

End.

Пример 7.7 Дана строка символов. Замените в ней все восклицательные знаки на точки.

program p77;

var str : string; d, i : integer;

begin writeln(‘Введите текст’);

readln(str);

d := Length (str);

writeln(‘Преобразованный текст’);

for i := 1 to d do

if str[i] = ‘!‘ then write(‘.’) else write(str[i]);

writeln

End.

Задание 7.2

1. Дана последовательность из 30 букв. Напечатайте эту последовательность дважды, в двух строках.

2. type color = (red, blue, green, yellow, black, white);

var x : color;

Во входном файле задана последовательность строчных латинских букв, за которой следует пробел. Если это правильная запись значения типа color, то присвойте его переменной х, иначе сообщите об ошибке.

3. Дан текст из 30 символов. Напечатайте только строчные русские буквы, входящие в этот текст.

4. Дана строка символов. Удалите из нее первый знак препинания.

5. Дана строка символов. Замените в ней все ‘А’ на ‘ААА’.

6. Дана строка символов. Определите длину самой длинной подстроки из подряд стоящих букв ‘а’.

7. Дана строка символов. Определите, сколько в ней слов, начинающихся и кончающихся на одну и ту же букву.

8. Дана строка символов. Удалите из нее последний знак препинания.

9. Дана строка символов. Удалите из нее каждое слово нечетной длины.

10. Дана строка символов. Определите длину самого длинного и самого короткого слова.

Работа с массивами, алгоритмы для обработки массивов

Массив данных

Массив – совокупность однотипных элементов.

Элементами массива могут быть данные любого типа, включая структурированные. Тип элемента массива называется базовым. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.

Доступ к каждому элементу массива осуществляется путем индексирования элементов массива. Индекс массива по смыслу тождествен понятию индекса элемента вектора. Индексы представляют собой выражения любого скалярного типа, кроме вещественного. Тип индекса определяет границы изменения значений индекса. Для описания массива предназначено словосочетание

Формат:

Type

<имя типа> = array [тип индекса] of <тип компонент>;

var <идентификатор, …> : <имя типа>;

Массив может быть описан и без представления типа в разделе описания типов данных:

var <имя типа> : array [тип индекса] of <тип компонент>;

Например:

1) var x : array [1..10] of real;

2) const n = 100;

var time : array [1.. n] of –20..20;

3) var a : array[1..5,1..5] of boolean;

4) const k = 5; h = 30;

var a1 : array[k..h] of integer;

Если в качестве базового типа взят другой массив, образуется структура, которую принято называть многомерным массивом. Например:

Type

vector = array of [1..4] of integer;

massiv = array of [1..4] of veactor;

var matrica : massiv;

Ту же структуру можно получить, используя другую форму записи:

var matrica : array[1..4,1..4] of integer;

Если в такой форме описания массива задан один индекс, массив называется одномерным, если два – двумерным, если n индексов - n-мерным. Размерность ограничивается только объемом памяти компьютера. Одномерные массивы обычно используются для представления векторов, а двумерные – для представления матриц.

Обработка массивов

Ввод-вывод массивов

Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно.

Значения элемента массива можно присвоить с помощью операторы присваивания, однако чаще всего они вводятся с экрана с помощью процедуры read или readln с использованием оператора цикла for:

var x : array [1..n] of real; i : integer;

for i := 1 to n do read(x[i]);

Значения двумерного массива вводятся с помощью вложенного оператора цикла for:

for i := 1 to 10 do

for j := 1 to 15 do

readln(b[i, j]);

Вывод значений элементов массива выполняется аналогичным образом, но используются процедуры write или writeln:

for i := 1 to n do write(x[i]);

для вывода значений элементов двумерных массивов

for i := 1 to 10 do

for j := 1 to 15 do

readln(b[i, j]);

Копирование массивов

Копированием массивов называется присваивание значений всех элементов одного массива всем соответствующим элементам другого массива. Копирование можно выполнить одним оператором присваивания, например, y := x; или с помощью оператора for:

for i := 1 to 5 do y[i] := x[i];

В обоих случаях значение элементов массива х не изменяется, а значения элементов массива у становятся равными значениям соответствующих элементов массива х. Очевидно, что оба массива должны быть идентичными по структуре.

Наши рекомендации