Опубликован: 06.09.2005 | Доступ: свободный | Студентов: 12780 / 1211 | Оценка: 3.98 / 3.46 | Длительность: 12:50:00
ISBN: 978-5-9556-0025-3
Лекция 5:

Символы и строки. Множества

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Обращение к компонентам строки

Доступ к k -му символу строки осуществляется так же, как к k -й компоненте массива (квадратные скобки являются обязательным элементом синтаксиса):

<имя_строки>[<индекс>]

Например:

{s = '15.47'}
c:= s[3];
{c = '.'}

Однако, в отличие от массива, нельзя напрямую заменять символы в строке, то есть действие

s[i]:= 'a';

не вызовет ошибки при компиляции, но, скорее всего, не станет работать во время выполнения программы. Для того чтобы изменить символ в строке, нужно воспользоваться стандартными функциями length(), concat() и copy(). В этом случае простое, казалось бы, действие приходится представлять как последовательность четырех операций:

  1. В качестве первой под строки взять из строки s символы с 1 -го по ( k-1 )-й:

    s1:= copy(s,1,k-1);
  2. В качестве второй под строки взять новое значение заменяемого символа:

    s2:= new_char;
  3. В качестве третьей подстроки взять оставшуюся часть строки s:

    s3:= copy(s,k+1,length(s)-k);
  4. Слить эти строки воедино, а результат записать вместо исходной строки s:

    s:= concat(s1,s2,s3);

Или можно объединить все четыре действия в одном операторе:

s:= concat(copy(s,1,k-1), new_char, copy(s,k+1,length(s)-k));
Конкатенация

Единственная операция, которую разрешается производить с переменными строкового типа, - это слияние строк или символов ( конкатенация ). Она полностью эквивалентна функции concat() и записывается при помощи знака " + ". Таким образом, предыдущий оператор можно сделать более простым:

s:= copy(s,1,k-1) + new_char + copy(s,k+1,length(s)-k);

Множества

Еще один структурированный тип данных - это множество ( set ). В нем может содержаться не более 256 элементов.

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

Описание множеств

В разделе var множества описываются следующим образом:

var <имя_множества>: set of <тип_элементов_множества>;

Элементы могут принадлежать к любому порядковому типу, размер которого не превышает 1 байт (256 элементов). Например:

var s1: set of char;	{множество из 256-ти элементов}
	s2: set of 'a'..'z','A'..'Z'; 	{множество из 52-х элементов}
	s3: set of 0..10; 	{множество из 11-ти элементов}
	s4: set of boolean; 	{множество из 2-х элементов}

Множество-константа

Неименованная константа

Множество можно задать неименованной константой прямо в тексте программы. Для этого необходимо заключить список элементов создаваемого множества в квадратные скобки:

[<список_элементов>]

Список элементов может быть задан перечислением элементов нового множества через запятую, интервалом или объединением этих двух способов. Элементы и границы интервалов могут быть переменными, константами и выражениями. Если левая граница интервала окажется больше правой, результатом будет пустое множество.

Примеры конструирования и использования различных множеств:

if c in ['a','e','i','o','u'] 
	then writeln('Гласная буква');
if set1 < [k*2+1..n,13] then set1:=[];
Нетипизированная константа

Множество - это структурированный тип данных, поэтому его невозможно задать нетипизированной константой.

Типизированная константа

Задать множество как типизированную константу можно в разделе const:

<имя_константы> : set of <тип_элементов> =[<список_элементов>];

Например:

type 	cipher = set of '0'..'9';
const odds: cipher = ['1','3','5','7','9'];
	vowels: set of 'a'..'z' = ['a','o','e','u','i'];
< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Евгения Поздеева
Евгения Поздеева
Ольга Стебакова
Ольга Стебакова

Вот фрагмент лекции 5 (статья 4):

Проверка множества на пустоту может быть осуществлена довольно просто:

pusto:= true;   for i:= 1 to N do 

if set_arr[i] then begin pusto:= false; break end; {мне кажется здесь должно быть так:

if set_arr[i]<>0 then begin pusto:= false; break end;}

Хотелось бы знать это ошибка в теории или я просто не поняла лекцию?