- •Данные о дисциплине
- •Выписка из учебного плана Дневное отделение
- •Введение
- •Примерный перечень практических занятий
- •Дополнительная литература
- •Раздел 2. Рабочая программа дисциплины:
- •2.1 Краткое описание дисциплины
- •Перечень заданий
- •Лекция 1. Введение в теорию Алгоритмов. Алгоритмы и алгоритмические языки. Свойства алгоритмов. Исполнители. Машина Тьюринга. Тезис Тьюринга
- •Алфавит языка Турбо Паскаль и специфика использования символов
- •Внешний вид исходного текста программы
- •Операции и выражения
- •Операторы Ввода-вывода Оператор вывода writeln
- •Лекция 5. Операторы условий, выбора и безусловного перехода. Циклы
- •Операторы циклов
- •Инкрементный цикл с параметром
- •Декрементный цикл с параметром
- •Лекция 6. Массивы
- •6.1. Одномерные массивы
- •6.2. Двумерные массивы (матрицы)
- •Обращение к компонентам массива
- •Лекция 7. Символы и строки. Множества
- •Строки. Строковые процедуры.
- •Неименованные константы
- •Действия с символами
- •Лекция 8. Множества (Set)
- •Лекция 9. Процедуры и функции Подпрограммы
- •Объявление и описание
- •Возвращаемые значения
- •Вызов подпрограмм
- •Параметр-константа
- •Функции
- •Параметр-значение
- •Лекция 10. Файлы. Файловые переменные.
- •Разновидности файлов
- •Работа с текстовыми файлами
- •Лекция 11. Записи. Бинарные файлы
- •Описание записей
- •Задание записей константой
- •Доступ к полям
- •Оперирование несколькими полями
- •Вложенные операторы with
- •Запись с вариантной частью
- •Описание записи с вариантной частью
- •Бинарные файлы. Использование таблиц с разнотипными полями. Работа с бинарными файлами
- •Типизированные файлы
- •Нетипизированные файлы
- •Подпрограммы обработки директорий
- •Дополнительная литература
- •Билеты для писменных экзаменов
Действия с символами
Строку почти всегда можно рассматривать как массив символов, то есть обращаться из программы к отдельным символам строки: s1[1], s2[1], txt[1][10] (в последнем случае имеется в виду десятый символ первой строки). Нумерация символов в строке всегда начинается с 1. Однако присваивание отдельным элементам строки конкретных символьных значений может не привести к желаемому результату. Чтобы понять, почему это иногда происходит, необходимо рассмотреть принципы организации строковых переменных в памяти компьютера. Дело в том, что для хранения любой строки отводится ровно на 1 байт больше, чем указано при ее описании (256 байт для строк, размерность которых не указана явно). Причем этот вспомогательный байт располагается в самом начале строки, фактически это ее нулевой байт. В нем хранится текущая реальная длина строки. Собственно говоря, такой механизм и накладывает максимальные ограничения на возможную длину строк в языке Паскаль, так как максимальное число, представимое в одном байте, равно 255. Значение этого байта автоматически изменяется программой при выполнении стандартных операций над строками: считывании, присваивании строковой переменной строкового выражения, обращении к стандартным процедурам и функциям, работающим со строковыми выражениями. Рассмотрим на примере, как меняется содержимое памяти и реальное значение строки при выполнении тех или иных операций:
Операция |
Содержимое памяти, выделенной строковой переменной s |
Значение s |
||||||
var s: string[6]; |
s[0] |
s[1] |
s[2] |
s[3] |
s[4] |
s[5] |
s[6] |
|
s:=‘ ‘; |
0 |
|
|
|
|
|
|
‘ ‘ |
s:=‘Yes’; |
3 |
Y |
e |
s |
|
|
|
‘Yes’ |
s[4]:=‘!’; |
3 |
Y |
e |
s |
! |
|
|
‘Yes’ |
s:=s+’No’; |
5 |
Y |
e |
s |
N |
o |
|
‘YesNo’ |
s[4]:=‘!’; |
5 |
Y |
e |
s |
! |
o |
|
‘Yes!o’ |
На этом примере можно понять, что операция присваивания значения элементу строки, индекс которого превосходит текущую длину строки, не является корректной и фактически не оказывает влияния на результат. Поэтому применения подобных конструкций при программировании следует избегать, стараясь обходить стандартными операциями над строками. Рассмотрим их подробнее.
В отличие от массивов, над строковыми переменными определены операции считывания и печати. К строкам применима операция сложения. При сложении двух строк концу первой из них приписывается вторая (по-другому эту операцию называют конкатенацией строк).
Над строками между собой производится согласно так называемому лексикографическому порядку. Строка s1 считается меньше строки s2, если существует такая позиция k, что s1[1..k-1] = s2[1..k-1] и s1[k]<s2[k] или такой позиции не существует, но строка s1 короче строки s2. При операциях сравнения идет сравнение строк, начиная с левого края до первого несовпадающего символа. Например:
Пример. Покажем переменные, выражающие результат от строки ‘институт’.
В программе можно обратиться также и к определенному символу строки:
Строковые процедуры
Delete(st,poz,n) – удаление из строки st n символов, начиная с позиции poz.
Insert(st1,st2,poz) – вставка строки st1 в строку st2, начиная с позиции poz.
str(a,st) – преобразовывает число или переменную типа integer, byte, real в строку и помещает результат в переменную st.
val(‘17425’,x,cod) – преобразовывает переменную st строкового типа в переменную типа integer, byte, real.
Если преобразование не может быть выполнено, то в переменную cod записывается номер символа строки, который является причиной неудачи преобразования. Если преобразование выполнено успешно, то значение cod=0.
Строковые функции
1. Copy(st,poz,n) – из строки st выделяется n символов, начиная с позиции poz.
2. Concat(st1,st2,…,stN) – дает новую строку, состоящую с st1 до stN строк, соединенных («сцепленных») в одну, для выполнения той же функции можно использовать знак «+».
3. Length(st) – длина строки st.
4. Pos(st1,st2) – обнаруживает первое появление в st2 подстроки st1.
5. UpCase(Ch) – преобразовывает строчную латинскую букву в прописную.
