Курсовик ЯВУ (1021667), страница 2
Текст из файла (страница 2)
3. Управляющие символы
В таблице 1 кроме обычных символов имеются специальные управляющие символы. Они представляют собой команды, вывод которых на стандартное выходное устройство приводит к выполнению определенных действий. Эти символы имеют мнемонические двух- или трехбуквенные сокращения, пришедшие к нам из эры телеграфа. К управляющему символу можно обратиться по его ASCII-коду или по Ctrl-последовательности. Последняя представляет собой код, порождаемый одновременным нажатием клавиши Ctrl и какой-либо другой клавиши.
Предположим, например, что в программе имеется описание
Var Сh: Char;
Тогда операторы
Ch: = chr (7);
Ch: = #7;
Ch: = ^G
присваивают символьной переменной Ch одно и то же символьное значение. Здесь ^G обозначает Ctrl-последовательность Ctrl+G (управляющий символ BEL – звуковой сигнал). Знак # и следующая за ним целая беззнаковая константа обозначает код символа.
Управляющие символы:
NUL, 00 — Null, пустой.
SOH, 01 — Start Of Heading, начало заголовка.
STX, 02 — Start of Text, начало текста.
ETX, 03 — End of Text, конец текста.
EOT, 04 — End of Transmission, конец передачи.
ENQ, 05 — Enquire. Прошу подтверждения.
ACK, 06 — Acknowledgement. Подтверждаю.
BEL, 07 — Bell, звонок, звуковой сигнал. Ctrl+G
BS, 08 — Backspace, возврат на один символ. Ctrl+H
TAB, 09 — Tabulation. Обозначался также HT — Horizontal Tabulation, горизонтальная табуляция. Ctrl+I
LF, 0A — Line Feed, перевод строки. Ctrl+J
VT, 0B — Vertical Tab, вертикальная табуляция.
FF, 0C — Form Feed, новая страница. Ctrl+L
CR, 0D — Carriage Return, возврат каретки. Ctrl+M
SO, 0E — Shift Out, начало использования национальной кодировки.
SI, 0F — Shift In, обратно к Shift Out.
DLE, 10 — Data Link Escape, следующие символы имеют специальный смысл.
DC1, 11 — Device Control 1, 1-й символ управления устройством — включить устройство чтения перфоленты.
DC2, 12 — Device Control 2, 2-й символ управления устройством — включить перфоратор.
DC3, 13 — Device Control 3, 3-й символ управления устройством — выключить устройство чтения перфоленты.
DC4, 14 — Device Control 4, 4-й символ управления устройством — выключить перфоратор.
NAK, 15 — Negative Acknowledgment, не подтверждаю. Обратно к Acknowledgment.
SYN, 16 — Synchronization. Синхронизация с чем-либо.
ETB, 17 — End of Text Block, конец текстового блока.
CAN, 18 — Cancel, отмена
EM, 19 — End of Medium, кончилась перфолента и т. д.
SUB, 1A — Substitute, подставить. Конец файла. Ctrl+Z
ESC, 1B — Escape. Символ Escape. Ctrl+[
FS, 1C — File Separator, разделитель файлов.
GS, 1D — Group Separator, разделитель групп.
RS, 1E — Record Separator, разделитель записей.
US, 1F — Unit Separator, разделитель юнитов.
DEL, 7F — Delete, стереть (последний символ).
Символьные данные можно вводить и выводить процедурами Read и Write. При вводе и выводе символьные значения изображаются без апострофов. Для символьные величин определены функции:
Ord(x) – возвращает номер символа
Pred(x) – возвращает символ с номером, меньшим на 1
Succ(x) – возвращает символ с номером, большим на 1.
Эти функции, однако, определены не только для символов, но и для любого порядкового типа данных. Порядковым типом называется такой тип, все допустимые значение которого можно пронумеровать от 0 до некоторого N (типы Byte, Integer, ShortInt, Word, LongInt). Значение функции Ord от числового аргумента равно самому этому аргументу, Pred(x) дает значение х-1, а Succ(x) – значение х+1. Функция Chr(x) в некотором смысле обратна функции Ord: для заданного числового аргумента x она возвращает символ с соответствующим номером. Для символьных переменных (так же, как и для любых переменных порядкового типа) определены процедуры Inc и Dec. Процедура Inc увеличивает значение любой переменной порядкового типа или указателя. Для увеличения значения переменной вещественного типа процедуру Inc использовать нельзя. Увеличение значения указателя изменяет его в соответствии с размером базового типа. Например, значение указателя на AnsiChar увеличивается на 1, указателя на WideChar - на 2. По умолчанию переменная увеличивается на один элемент, однако можно указать целый параметр для увеличения значения переменной на другую величину. При увеличении указателя Count умножается на размер базового типа. Процедура Dec уменьшает значение переменной любого порядкового типа или указателя, но ее нельзя использовать для уменьшения значения вещественной переменной. Уменьшение значения указателя изменяет его значение на величину, равную размеру базового типа. Например, значение указателя на AnsiChar уменьшается на 1, а указателя на WideChar – на 2. По умолчанию переменная уменьшается на одну единицу, однако можно указать целый параметр для изменения на другую величину. При уменьшении указателя значение переменной Count умножается на размер базового типа.
Значением символьной переменной (типа Char) является только один символ.
4. Строковый тип
В Паскале широко используется тип String (строка) – это последовательность символов произвольной длины (но не более 255 символов). Строку можно было бы рассматривать как одномерный массив символов, однако в связи с широким использованием строк и некоторыми особенностями в сравнении со стандартными массивами они выделены в отдельный тип данных. В отличие от обычного массива с фиксированной длиной, длина строковой переменной может меняться.
Строковые переменные и типизированные константы записываются в виде:
s: string;
s: string[максимальная длина];
Если максимальная длина не задана, то по умолчанию она берется целочисленным константным выражением и никогда не может превышать 255. Одиночный байт может принимать 256 различных значений от 0 до 255. Это ограничение обусловлено самой структурой типа String: фактически строка – это массив Array[byte] of Char, причем в нулевом символе закодирована текущая длина строки. строковые переменные могут иметь любую длину от 0 до максимальной. В программе строки можно использовать и как единый структурированный объект, и как массив символов. Обращаться к элементам следует так же, как и к элементам массива, т.е. есть возможность доступа к отдельным байтам строковой переменной.
4.1. Функции и процедуры для работы со строками
В Паскале имеется набор функций и процедур для работы со строками.
1. К строкам можно применить операцию конкатенации, которая обозначается знаком «плюс». Конкатенация – это объединение строк.
SS1:= ‘ABC’;
SS2:= SS1 + ‘DEF’;
Результатом такой последовательности операторов будет строка ‘ABCDEF’. Несмотря на то, что конкатенация выглядит как арифметическое сложение, результат этой операции зависит от порядка слагаемых и меняется при их перестановке. Результатом выполнения последовательности операторов
SS1:= ‘ABC’;
SS2:= ‘DEF’ + SS1;
будет значение ‘DEFABC’. Длина строковой переменной SS2 должна назначаться с учетом суммарной длины слагаемых.
Строковая константа в исходном тексте программы должна размещаться в пределах одной строки. Простой перенос части символьного значения на другую строку приведет к ошибке компиляции «Error 8: String constant exceeds line». Чтобы задать длинное строковое значение, занимающее в тексте программы несколько строк, можно воспользоваться операцией конкатенации. Операцию слияния строк выполняет функция Concat (s1,s2).
a := 'Turbo';
b := 'Pascal';
c := a + b; {переменная с приобретает значение Turbo Pascal}
2. Процедура ClrScr (модуль Crt) очищает экран, а GotoXY(column, line) (модуль Crt) устанавливает курсор в позицию column на строке line.
3. Функция Length(str) определяет длину аргумента str строкового типа.
n := length('Pascal'); {n будет равно 6}
4. Процедура Delete (S: string, Index: integer, Count: Integer) удаляет из строки S подстроку, начинающуюся с символа с номером Index и имеющую длину Count.
s := 'Система Turbo Pascal';
delete(s,8,6); {s будет равно 'Система Pascal'}
5. Функция Pos (substr: string, s: string): Byte – возвращает номер первого слева символа строки S, начиная с которого строка Substr входит в S. Если Substr не входит в S, то значение функции равно нулю.
s := 'Система Turbo Pascal';
x1 := pos('Pascal', s); {x1 будет равно 15}
x2 := pos('Basic', s); {x2 будет равно 0}
6. Функция Copy (S: string, Index: Integer, Count: Integer): String – возвращает подстроку строки S, которая начинается с символа с номером Index и имеющую длину Count.
s := 'Система Turbo Pascal';
s2 := copy(s, 1, 7); {s2 будет равно 'Система'}
s3 := copy(s, 9, 5); {s3 будет равно 'Turbo'}
s4 := copy(s, 15, 6); {s4 будет равно 'Pascal'}
7. Процедура Insert (Substr: String, S: String, Index: Integer) вставляет в строку S подстроку Substr начиная с символа с номером Index.
Из вышеизложенного понятно, что процедуры и функции могут иметь параметры типа String, но так же допустимы функции типа String, хотя это не скалярный тип.
s := 'Система Pascal';
insert('Turbo ',s,9); {s будет равно 'Система Turbo Pascal'}
8. Процедура Val (S: String, V; Code: Integer) – преобразует строку S в число V (если это возможно). V – любая переменная арифметического типа, переменная Code возвращает 0, если преобразование прошло успешно, или номер неправильного символа строки.
9. Процедура Str (X [: Width [:Decimals]]; S: String) – преобразует произвольное арифметическое выражение X в строку S, параметры Width и Decimals позволяют форматировать строку и имеют такой же смысл, как и в процедуре Writeln (Write).
5. Практическая часть
5.1. Подсчет количества слов в тексте.
5.1.1. Слова в тексте разделены одним пробелом.
| program slova; |
| {$APPTYPE CONSOLE} |
| function rus(s:string):string; |
| var i:integer; |
| begin |
| for i:=1 to length(s) do |
| case s[i] of |
| 'A'..'п': s[i]:=chr(ord(s[i])-64); |
| 'р'..'я': s[i]:=chr(ord(s[i])-16); |
| end; |
| rus:=s; |
| end; |
| var |
| Text: string; //заданный текст |
| i, num : Integer; //num - количество слов в тексте |
| b : char; //текущая буква |
| begin |
| writeln (rus('Введите текст :')); |
| readln (Text); |
| num:=1; |
| for i:=1 to length(Text) do //побуквенный цикл |
| begin |
| b:=Text[i]; |
| If (b = ' ' ) then num:=num+1; |
| end; |
| writeln (rus('Количество слов в тексте равно : '), num); |
| readln; |
| end. |
--------------------------------------------------------------------------------
Введите текст :
Borland Turbo Pascal
Количество слов в тексте равно : 3
| Номер теста | Проверяемый случай | Данные | Результат |
| 1 | В строке записано одно слово | Text: ‘Borland’ | num = 1 |
| 2 | В строке записано 3 слова | Text: ‘Borland Turbo Pascal’ | num = 3 |
5.1.2. Слова в тексте разделены произвольным количеством пробелов.
| program slova2; |
| {$APPTYPE CONSOLE} |
| function rus(s:string):string; |
| var i:integer; |
| begin |
| for i:=1 to length(s) do |
| case s[i] of |
| 'A'..'п': s[i]:=chr(ord(s[i])-64); |
| 'р'..'я': s[i]:=chr(ord(s[i])-16); |
| end; |
| rus:=s; |
| end; |
| var |
| Text: string; //заданный текст |
| i, num: Integer; //num - количество слов в тексте |
| flag: boolean; |
| b: char; //текущая буква |
| begin |
| writeln(rus('Введите текст :')); |
| readln(Text); |
| num := 0; |
| flag := true; |
| for i := 1 to length(text) do //побуквенный цикл |
| begin |
| b := text[i]; //текущая буква текста |
| if (b <> ' ') and flag |
| then num := num+1; |
| flag := (b=' ') |
| end; |
| writeln; |
| writeln(rus('Количество слов в тексте равно : '), num); |
| readln; |
| end. |
----------------------------------------------------------------------------------------------------
Введите текст :
Языки программирования высокого уровня















