- •1.1. Как начать работу с турбо паскалем
- •1.2. Функциональные клавиши
- •1.3 Текстовый редактор
- •1.4. Основные приемы работы в среде турбо паскаля
- •Глава2. Знакомство с языком турбо паскаля
- •Глава 2 знакомство с языком турбо паскаля
- •2.1. Ваша первая программа
- •2.2. Типы данных
- •2.3. Преобразования типов и действия над ними
- •2.4. Операторы языка
- •2.5. Массивы
- •2.6. Процедуры и функции
- •2.7. Примеры программ
- •Глава3.Элементы языка
- •Глава 3
- •3.1. Алфавит
- •3.2. Идентификаторы
- •3.3. Константы
- •3.4. Выражения
- •3.5. Операции
- •3.6. Структура программы
- •Глава 4. Типы данных
- •4.1. Простые типы
- •4.2. Структурированные типы
- •4.3. Строки
- •4.4. Совместимость и преобразование типов
- •Глава 5. Файлы
- •Глава 5
- •5.1. Доступ к файлам
- •5.2. Процедуры и функции для работы с файлами
- •5.3. Текстовые файлы
- •5.4. Типизированные файлы
- •5.5. Нетипизированные файлы
- •Глава 6. Указатели и динамическая память
- •6.1. Динамическая память
- •6.2. Адреса и указатели
- •6.4. Выделение и освобождение динамической памяти
- •6.5. Использование указателей
- •6.6. Процедуры и функции для работы с динамической памятью
- •6.7. Администратор кучи
- •Глава 7. Типизированные константы
- •7.1. Константы простых типов и типа string
- •7.2. Константы-массивы
- •7.3. Константы-записи
- •7.4. Константы-множества
- •7.5. Константы-указатели
- •Глава 8. Процедуры и функции
- •Глава 8
- •8.1. Локализация имен
- •8.2. Описание подпрограммы
- •8.3. Параметры-массивы и параметры-строки
- •8.4. Процедурные типы. Параметры-функции и параметры-процедуры
- •8.5. Нетипизированные параметры-переменные
- •8.6. Рекурсия и опережающее описание
- •8.7. Расширенный синтаксис вызова функций
- •Глава 9. Модули
- •Глава 9
- •9.1. Структура модулей
- •9.2. Заголовок модуля и связь модулей друг с другом
- •9.3. Интерфейсная часть
- •9.4. Исполняемая часть
- •9.5. Инициирующая часть
- •9.6. Компиляция модулей
- •9.7. Доступ к объявленным в модуле объектам
- •9.8. Стандартные модули
- •Глава 10. Объекты
- •Глава 10
- •10.1. Основные принципы ооп
- •10.2. Постановка учебной задачи
- •10.3. Создание объектов
- •10.4. Использование объектов
- •Глава 11. Другие возможности турбо паскаля
- •Глава 11
- •11.1. Внешние процедуры (функции)
- •11.2. Использование встроенных машинных кодов
- •11.3. Обращение к функциям операционной системы
- •11.4. Поддержка процедур обработки прерываний
- •11.5. Запуск внешних программ
- •11.6. Оверлей
- •11.7. Прямое обращение к памяти и портам ввода-вывода
- •11.8. Длинные строки
- •Глава 12. Встроенный ассемблер
- •Глава 12
- •12.1. Общее описание мп 8086/8088
- •12.2. Специфика встроенного ассемблера
- •Глава 13. Использование библиотеки crt
- •Глава 13
- •13.1. Программирование клавиатуры
- •13.2. Текстовый вывод на экран
- •13.3. Программирование звукового генератора
- •Глава 14. Использование библиотеки graph
- •Глава 14
- •14.1. Переход в графический режим и возврат в текстовый
- •14.2. Координаты, окна, страницы
- •14.3. Линии и точки
- •14.4. Многоугольники
- •14.5. Дуги, окружности, эллипсы
- •14.6. Краски, палитры, заполнения
- •14.7. Сохранение и выдача изображений
- •14.8. Вывод текста
- •14.9. Включение драйвера и шрифтов в тело программы
4.3. Строки
Тип STRING (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY[O..N] OF CHAR, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не больше 255 . Турбо Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255 .
Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [0..N] OF CHAR, например:
var
st : String;
begin
.....
if st[5] = 'A' then...
end.
Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки, первый значащий символ строки занимает второй байт и имеет индекс 1. Над длиной троки можно осуществлять необходимые действия и таким способом изменять длину. Например, удалить из строки все ведомые пробелы можно следующим образом:
var
st : String;
i : Byte;
begin
i := ord(st [0] ) ; {i - текущая длина строки}
while (i <> 0) and (st[i] = ' ') do
begin
dec(i);
st[0] := chr(i)
end;
.....
end.
Значение ORD(st[0]) , т.е. текущую длину строки, можно получить и с помощью функции LENGTH(st), например:
while (Length(st)<>0) and (st[Length(st)]=' ') do
st[0] := chr(Length(st)-1)
К строкам можно применять операцию «+» - сцепление, например:
st := 'а1 + 'b';
st := st + 'с'; {st содержит "abc"}
Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются. Следующая программа, например, напечатает символ 1:
var
st: String [1] ;
begin
St:='123';
WriteLn(st)
end.
Все остальные действия над строками и символами реализуются с помощью описываемых ниже стандартных процедур и функций.
CONCAT(S1 [,S2, ... , SN] ) - функция типа STRING; возвращает строку, представляющую собой сцепление строк-параметров SI, S2, ..., SN.
COPY(ST, INDEX, COUNT) - функция типа STRING; копирует из строки ST COUNT символов, начиная с символа с номером INDEX.
DELETE (ST, INDEX, COUNT) - процедура; удаляет СОUNT символов из строки ST, начиная с символа с номером INDEX.
INSERT (SUBST, ST, INDEX) - процедура; вставляет подстроку SUBST в строку ST, начиная с символа с номером INDEX.
LENGTH (ST) - функция типа INTEGER; возвращает длину строки ST.
POS (SUBST, ST) - функция типа INTEGER; отыскивает в строке STпервое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.
STR(X [; WIDTH [: DECIMALS] ], ST) - процедура; преобразует число X любого вещественного или целого типов в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования: WIDTH определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, a DECIMALS - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда Х- вещественное число).
VAL(ST, X, CODE) - процедура; преобразует строку символов ST во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразований, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется; в строке ST могут быть ведущие пробелы, однако ведомые пробелы недопустимы; например, обращение val (' 123',k,i) пройдет успешно: k получит значений 123, в i будет помещен 0, в то время как обращение val (' 123 ' , k, i) будет ошибочным: значение k не изменится, a i будет содержать 4.
UPCASE (СН) - функция типа CHAR; возвращает для символьного выражения СН, которое должно представлять собой строчную латинскую букву, соответствующую заглавную букву; если значением СН является любой другой символ (в том числе строчная буква русского алфавита), функция возвращает его без преобразования.
Примеры:
var
х : Real;
у : Integer;
st,st1: String;
begin
st := concat('12','345'); {строка st содержит 12345}
st1 := copy(st,3,Length(st)-2); {st1 содержит 345}
insert('-',st1,2); {строка st1 содержит 3-45}
delete(st,pos('2',at),3); {строка st содержит 15}
str(pi:6:2,st); {строка st содержит 3.14}
val(''3,1415' ,x,y) ; {у содержит 2, х остался без изменения}
end.
Операции отношения =, о, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов (см. табл.4.1 и прил.2). Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением СНR(0) .
Следующие операции отношения дадут значение TRUE:
'''' < ' . '
'А' > '1'
'Turbo' <' Turbo Pascal'
'Паскаль' >'Turbo Pascal'