#0B СТРОКИ

Вступление

Добрый день!
Пока на вопросы из прошлого выпуска, пришло всего лишь 2 ответа, будем ждать.... А пока читайте очередной выпуск рассылки.

Теория

Давайте подумаем, как мы можем представить строки ? Нам известен тип символов (char) поэтому строку вполне логично представить, как массив символов. Вот и в Паскале есть тип String, который очень похож на array [0 .. N] of char. N можно задать явно (объявить переменную String[N]) или вообще не задавать, тогда будет использоваться значение 255. К любому символу строки можно обратится точно так же как и к элементу массива. Давайте рассмотрим примерчик:

var
   st : String;
begin
     st := 'Turbo Pascal';
	 .....	 
Самый первый элемент строки st [0] - содержит длинну строки. Дальше идут символы строки. Для нашего примера st[0] = 12, st[1] = 'T', st[2] = 'u' и т.д. Длинну строки (в целых числах) можно получить двумя способами:
  1. функция LENGHT (STR) - возвращает длинну строки str
  2. Использовать ORD (st[0])
Например так:
var
	st :  String;
	i : integer;
....................
   i := ord (st[0]); - в i длинна строки
   .....................
   i := lenght (st );  - в i длинна строки
   ...........
Если длинна строки будет больше N, то строка автоматически урежется до нужного размера! Например программа
var
   st : String [10];
begin
     st := 'Turbo Pascal';
     writeLn (st)
end.
выведет на экран Turbo Pasc Вот так! Будте внимательны!

К строкам можно применять операцию "сцепление" - "+". Например st := 'a' +'b', потом st = 'ab'

для работы со строками в Паскале имеется мощный арсенал функций:

  • CONCAT (S1, S2, ... , Sn) - получает переменное число параметров (как write). Возвращает строку, представляющую собой сцепление строк S1, S2, ..Sn.
  • COPY (ST, INDEX, COUNT) - возвращает строку, содержащую COUNT символов строки ST, начиная с номера INDEX
  • DELETE (ST, INDEX, COUNT) - удаляет COUNT символов из строки ST, начиная с символа под номером INDEX.
  • INSERT (SUB, ST, INDEX) - вставляет строку SUB в строку ST, начиная с номера INDEX.
  • LENGHT (ST) возвращает целое число (integer) - длинну строки ST
  • POS (SUB, ST) - ищет строку SUB в строке ST (до первого нахождения) . Возвращает номер позиции с которой она начинается, если строка не найдена, то 0. Тип возращаемого значения - Integer
  • STR (X, ST) - преобразует число Х (любого типа) в строку символов ST (из 123 получим '123'). Число Х может иметь формат. Подробнее об формате смотрите выпуск "Типы данных".
  • VAL (ST, X, CODE) - перобразует строку ST в целую или вещественную переменную Х. CODE содержит 0, если преобразование прошло успешно. В противном случае - номер ошибочного символа. Например val ('    123', x, c) будет x = 123, с = 0. НО val ('123    ', x, c) - с = 4. Т.е. пробелы допустимы перед числом, но не после него!
Конечно это краткое описание не может дать полног представления об функциях, но увы времени на подготовку этого выпуска совсем мало :(((( Поэтому наша фирма предоставляет вам уникальную, доселе невиданную возможность :) - поэксперементировать с этими функциями. Напишите программку, которая просто по очереди вызывает функции для работы со строками. Если возникнут вопросы - пишите ibp7@yandex.ru

Так же над строкаи можно выполнять операции сравнения (=, <> , >, <, >=, <=). Но подробнее об этом в разделе программа.

Программа

Сегодня мы напишем программу, которая выведет на экран таблицу символов. В этой таблице 256 символов. С некоторыми символами вы уже знакомы - это буквы. Но есть ещё большое количество символов - так называемые символы псевдографики. С их помощью можно например чертить таблицы. Весь интерфейс BP организован с помощью этих символов. Вот сегодня мы и выведем их на экран!

Для этой цели можно было бы использовать array [1..256] of char, но куда проще написать это через строку!

Program Table;

var
   st : string;
   i : integer;
begin
     for i := 0 to 255 do
     begin
          st [i] := chr (i);
          write(st[i], #32)
     end
end.
Итак как вы видите мы использовали строку просто как массив, если вы попытаетесь вывести её на экран (write (st)), то ничего не выйдет. Почему ? Потому что мы в цикле присваеваем всем символам строки номер. А st[0] = 0 !!! А ведь в st[0] у нас хранится длинна строки !

Я надеюсь, что все уже успели выучить, что Паскаль - строго типизированный язык. Поэтому что бы присвоить символу целое значение, нам нужно его преобразовать к символу. Это и делает функция chr !

Теперь мы познакомились с таблицей символов. Обратите внимание, что руские буквы идут не подряд. Вначале от 'а' до 'п' потом 'р' до 'я' и ещё в конце идёт буква 'ё' !

Вернемся к сравнению строк. Все операции сравнения над двумя строками выполняются по-символьно слева на право, с учётом таблицы символов. Если одна строка меньше другой, то короткая дополняется 0-ым символом до нужной длинны! Например следующие сравнения будут истинны:

'A' > '1'
'a' > 'A'
'Turbo' < 'Turbo Pascal'
'Паскаль' > 'Pascal'

Голосование

Голосовани по поводу объяснения материала в рассылке всё ещё доступно - http://narod.yandex.ru/survey/?id=79839.

Послесловие

Ну вот вообщем-то и всё! Не слишком много, но ... Следующий выпуск будет по больше.... надеюсь :)


[Назад] [Содержание] [Дальше]
Hosted by uCoz