LENGTH (s) - функция выдает в байтах длину строки s:string, измеряемую в символах.
Например, функция LENGTH(st), где St = 'ABBCCD' возвратит значение 6.
CONCAT (s1,s2,...,sN) – функция осуществляет сцепление строк s1,s2,..., sN:string и выдает результат в виде одной общей строки. Например:
St:= '1a'; S3:=Concat(St, 'bc'); аналог S3:= St+'bc' S3 = '1abc'.
COPY (S, Start, Len) - функция выдает подстроку типа string из строки S:string длиной Len:integer, начиная с символа с номером Start:integer.
Если Start >Length(S) (больше длины всей строки S), то функция вернет пустую строку; если Start>255, то возникает ошибка. Если Len больше, чем число символов от позиции Start до конца строки S, то вернется остаток строки S от Start до конца. Например, для выражения COPY('ABCDEF', 2, 3) результатом является строка 'BCD'.
DELETE (S, Start, Len) - процедура возвращает строку S:string, удаляя из неё подстроку длиной Len:integer, начиная с символа с номером Start:integer.
После стирания подстроки ее оставшиеся части "склеиваются". Если Start=0 или превышает длину строки S, то строка не изменяется. Не изменит строку и значение Len=0. При Len большем, чем остаток строки, будет удалена подстрока от Start до конца S. Например, для
Delete('aбвгде', 4, 2); // результатом будет строка - “абве”.
INSERT (Subs, S, index) - процедура возвращает строку S:string, вставляя в неё подстроку Subs:string, начиная с символа под номеpом index:integer;
Если измененная строка S оказывается слишком длинной, то она автоматически укорачивается до объявленной длины S (при этом всегда теряются символы справа). Например,
st:= 'abcdef';
Insert('-***-',st, 4); // результат - строка: St = 'abc-***- de'
POS (Subs, S) - функция типа byte отыскивает вхождение подстроки Subs:string в строке S:string и выдает номер позиции, с которой начинается это вхождение.
Если строка s не содержит данной подстроки, то функция POS выдает 0. Если в строке s несколько одинаковых подстрок subs, то функция выдает только номер первого вхождения. Например, для строки St = 'abcdef' результатом функций
|
POS('de', St); является значение 4,
POS('k', St); является значение 0.
STR (x [:w[:n]], s) - процедура преобразует числовое значение x в строковое s:string, возвращая строку s.
Х может быть переменной или выражением целого или вещественного типа. Для переменной x может быть указана ширина поля w, которое она занимает, а также n - количество знаков после десятичной точки. Параметры [:w[:n]] не обязательны. Если параметр n отсутствует для вещественного типа, то используется экспоненциальное представление. Если w больше, чем реальное количество знаков в числе, то производится выравнивание числа по правому краю. Для выравнивания по левому краю используется отрицательное значение w. Если в дробной части числа x знаков больше, чем указано в n, выполняется округление.
Например:
str(6.66:8:1, s); {результат: S= '6.7' c округлением}
str(6.66:-8:2, s); {результат: S= '6.66'}
VAL (S, x, ErrCod) - процедура преобразует числовую строку S:string в числовую переменную x (типа Real или Integer) и формирует код ошибки ErrCod:Integer, возвращая x и ErrCod.
Строка S не должна содержать незначащих пробелов, в том числе в начале и конце. ErrCod - целочисленная переменная. Она равна 0, если преобразование выполнено. В противном случае (если преобразование невозможно) эта функция выдает код символа, на котором прекратилось преобразование, значение x в этом случае не определено. Если в строке S имеется десятичная точка или символ E, то переменная x должна быть определена вещественной.
|
Например:
VAL('1324', x, Cod); // результат преобразования x = 1324, Cod=0;
VAL('13.24Е2', x, Cod); // результат преобразования x = 1324, Cod=0;
VAL('25А3', x, Cod); // результат не определен, Cod=3.
Пример и задания для обработки строк
Пример. Ввести строку st1. Сформировать строку st2 перестановкой символов исходной строки в обратном порядке и заменой всех строчных латинских букв прописными.
Program lr_10;
Var i, j: byte;
st1, st2: string; {эквивалентно string[255]}
Begin
writeln(‘введи строку’);
readln (st1);
writeln(‘исходная строка:’, st1);
j:= LENGTH(st1); {максимальный индекс элемента в строке}
for i:=1 to ord(st1[0]) do
begin
st2[i]:= UPCASE(st1[j]);
j:= j-1
end;
st2[0] = st1[0]; {запись символа с кодом, равным длине строки}
write(‘искомая строка: ’, st2);
writeln {перевод строки}
END.
Задания для самостоятельного выполнения
1. Дана строка, содержащая не более двадцати латинских букв. Все вхождения «max» в ней заменить на «min» и «макс» на «мин». Подсчитать число таких замен.
2. Дана строка, содержащая сорок латинских букв. Подсчитать все вхождения «abc» в строку и их удалить. Вывести на экран два варианта полученных строк, заполняя образовавшуюся «дыру» последующими буквами с добавлением в конце пробелов и оставляя на месте удаленных символов пробелы.
3. Определить сколько различных символов входит в заданный текст, содержащий не более 100 литер и оканчивающийся точкой.
4. Определить номера позиций гласных букв в заданном тексте.
5. Напечатать заданный текст из 60 символов, удалив из него повторные вхождения каждой литеры.
6. Дана строка, состоящая из слов, разделенных пробелами, в конце строки – точка. Определить, сколько в строке слов, содержащих четное число символов.
|
7. Дан набор слов на английском языке, разделенных пробелами, в конце точка. Выделить в последовательности нечетные слова прописными буквами.
8. Дан непустой текст из строчных букв, за которыми следует точка. Определить, упорядочены ли эти буквы по алфавиту. Напечатать результат проверки и исходный текст прописными буквами.
9. Дана последовательность от двух до восьми слов, в каждом из которых от одной до десяти строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать слово с максимальной длиной.
10. Дано несколько слов, в каждом из которых от одной до семи строчных букв, между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать эти слова в алфавитном порядке.
11. Дана последовательность, содержащая от одного до восьми слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность, удалив из нее повторные вхождения слов.
12. В заданном тексте (слова разделены пробелами) поменять местами первое и последнее слово.
13. Даны числа K и текст из слов, разделенных пробелами, в конце – точка. Определить количество слов в тексте, состоящих из K букв.
14. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до восьми строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать те слова, в которых буквы слова упорядочены по алфавиту.
15. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность слов, но в обратном порядке.
16. В заданный текст входят только цифры и буквы. Определить, является ли текст десятичной, шестнадцатеричной или двоичной записью целого либо вещественного числа (указать при выводе какого).
17. В заданном тексте найти и, если есть, напечатать все слова-палиндромы (слова, которые одинаково читаются слева направо и справа налево).
18. Дан текст из слов, разделенных пробелами, в конце – точка. Найти слово наименьшей длины (содержащее наименьшее количество букв).
19. Разработать программу шифровки – дешифровки текста путем замены каждой буквы текста другой буквой, с кодом на N больше (меньше) исходной.
20. Дана непустая последовательность слов, в каждом из которых от одной до шести букв; между соседними словами – запятая, за последним – точка. Напечатать те слова, у которых одинаковые «соседи». (Написать процедуру, которая вводит очередное слово и присваивает его литерной строке, а запятую или точку присваивает некоторой глобальной переменной).
ФАЙЛЫ
Файл - именованная область внешней памяти ПК. Файлом может называться логическое устройство, потенциальный источник или приемник информации.
Файл характеризуется именем и содержит компоненты одного типа (может быть любой тип, кроме файлов). Длина вновь создаваемого файла не указывается при его объявлении.
В Pascal ABC различают типизированные и текстовые файлы. Определяются файловые типы в блоке TYPE следующим способом:
Type
<имя> = FILE OF <тип>; {типизированный}
<имя> = TEXT; {текстовый}
где < имя > - имя файлового типа (правильный идентификатор);
FILE, OF - зарезервированные слова (файл, из),
TEXT - имя стандартного типа для текстовых файлов;
< тип > - любой тип, кроме файлового.
Например:
TYPE
FIL = file of char; {файл символов}
text30 = file of string[30]; {файл строк }
Вид файла определяет способ хранения информации в файле.
Переменные файловых типов объявляются в разделе VAR:
VAR f: FIL;
ff: text30; а также
f1: TEXT; {переменная для текстового файла }
f2: file of real; {переменная файла вещественных чисел}
т. е. сразу можно описывать файловые переменные без объявления типа, например:
VAR
<имя_переменной>: TEXT;
<имя_переменной>: FILE OF <тип>;
Некоторые файлы могут только вводить информацию (клавиатура), другие - только принимать ее (устройства печати), третьи позволяют и считывать, и записывать (файл на диске). Именно с помощью файловой системы осуществляется весь ввод и вывод информации в программе.
Все файлы становятся доступными программе только после связывания ранее объявленной файловой переменной с именем существующего или вновь создаваемого файла, а также в указании направления обмена информацией: чтение из файла или запись в него.