- •Оглавление
- •§1. Первое знакомство с системой программирования Турбо Паскаль
- •§2. Основные элементы языка
- •§3. Команды редактора Команды управления движением курсора
- •§4. Первая программа
- •Пояснения к программе
- •Запуск программы
- •Сохранение программы
- •§5. Управление позициями и цветом вывода
- •§6. Арифметический квадрат.Абсолютная величина
- •§7. Типы данных
- •§8. Целый тип данных
- •Пример 6
- •Пример 7
- •Пример 8
- •§9. Вещественный тип данных
- •Пример 7
- •Пример 8
- •§10. Логический тип данных
- •§11. Условный оператор
- •Пример 1
- •Пример 2
- •Решение
- •§12. Оператор безусловного перехода. Раздел описания меток
- •§13. Вложенные условные операторы
- •Решение
- •Задание
- •Решение задач Задача 1
- •Задача 8
- •Задача 9
- •Задача 10
- •§14. Цикл с параметром
- •Пример 1
- •Пример 2
- •Пример 3
- •§15. Работа с окнами. Метод пошагового выполнения программ
- •§16. Решение задач с использованием цикла с параметром Задача 1
- •Решение
- •Задача 2.
- •§17. Цикл с предусловием
- •Оператор цикла с предусловием
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§18. Цикл с постусловием
- •Пример 1
- •Решение
- •Пример 2
- •§19. Алгоритм Евклида
- •§20. Вложенные циклы Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •Решение
- •Пример 5
- •§21. Решение задач с использованием циклов с условием Задача 1
- •Решение
- •Задача 2
- •§22. Символьный тип данных
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§23. Ограниченный тип данных
- •Var b:3..8; а не просто Vаг b:Integer;
- •Решение
- •§24. Оператор варианта (выбора)
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •§25. Перечисляемый тип данных
- •§26. Описание переменных, констант и типов. Раздел описания констант
- •Раздел описания типов
- •§27. Преобразование типов. Совместимость типов
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение.
- •§28. Процедуры
- •Описание процедуры
- •Решение
- •Begin {основная программа}
- •Пример 2
- •Решение
- •Пример 3
- •§29. Функции
- •Пример 1
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§30. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Пример 3
- •Задачи, которые можно решить как частный случай обобщенной
- •Задание
- •Задачи, в которых можно использовать характеристику или свойство функции Пример
- •Решение
- •§31. Файловый тип данных Операции для работы с файлами последовательного доступа
- •§32. Обработка файлов Связь переменной файлового типа с файлом на диске
- •Чтение из файла
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •§33. Прямой доступ к элементам файла
- •Удаление файлов. Процедура
- •Переименование файлов. Процедура
- •Пример 2
- •§34. Текстовые файлы
- •Обработка текстовых файлов
- •Пример 1
- •Решение
- •Пример 2
- •Нетипизированные файлы
- •§35. Одномерные массивы. Работа с элементами(разбор на примерах) Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Begin {Считываем очередную строку}
- •§36. Работа с элементами массива (разбор на примерах)
- •Пример 2
- •§37. Методы работы с элементами одномерного массива
- •Создание массива
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Работа с несколькими массивами Пример
- •Решение
- •§38. Удаление элементов из одномерного массива Пример 1
- •Решение
- •Begin {Сдвиг элементов на один влево}
- •Пример 2
- •Решение
- •§39. Вставка элементов в одномерный массив
- •Вставка нескольких элементов
- •Решение
- •§40. Перестановки элементов массива
- •§41. Двухмерные массивы Описание. Работа с элементами
- •§42. Найти сумму элементов
- •Решение
- •§43.Нахождение количества элементов с данным свойством
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§44. Работа с несколькими массивами Пример
- •Решение
- •§45. Определить, отвечает ли заданный массив некоторым требованиям Пример 1
- •Решение
- •Пример 2
- •Решение
- •§46. Изменение значений некоторых элементов, обладающих заданным
- •§47. Заполнение двухмерного массива по правилу
- •Пример 2
- •Решение
- •§48. Вставка и удаление элементов Вставка строки
- •Решение
- •Примечания
- •Удаление строки Пример
- •Решение
- •Примечания
- •§49. Перестановка элементов массива Перестановка двух элементов Пример 1
- •Решение
- •Пример 2
- •§50. Строковый тип данных
- •Операции со строками
- •Склеивание
- •Сравнение
- •Примеры
- •Пример 8
- •Пример 9
- •Пример 10
- •§51. Множественный тип данных
- •Операции над множествами
- •Примеры
- •Сравнение множеств
- •Пример 1
- •Пример 2
- •Вопросы для обсуждения
- •Пример 3
- •Вопросы для обсуждения
- •Пример 4
- •Решение
- •Пример 5
- •Решение
- •§52. Комбинированный тип данных (записи)
- •Пример 1
- •Пример 2
- •Пример 3
- •Решение
Операции со строками
В Паскале имеется два основных способа обработки переменных типа String. Первый способ предполагает обработку всей строки как единого целого, т.е. единого объекта. Кроме того (это второй способ), можно рассматривать строку как составной объект, состоящий из отдельных символов, то есть элементов типа Char, которые при обработке доступны каждый в отдельности.
Склеивание
Под склеиванием понимается последовательное объединение нескольких строк.
Пример
Var Str1, Str2, Str3: String[20];
Str1:='y Егорки';
Str2:='всегда отговорки';
Str3:=Str1+' '+Str2;
Строка Str3 имеет значение 'У Егорки всегда отго'. В данном примере максимальная длина строки Str3 равна 20 символам, поэтому будут взяты только первые 20 символов суммы строк, а остальные рассматриваться не будут. Паскаль позволяет выполнять операции объединения (сцепления) нескольких строк в процессе их присвоения какой-либо переменной: Str3:= 'У Егорки '+' всегда '+' отговорки'. В результате такой операции в переменной Str3 будет то же самое содержимое, что и в предыдущем примере.
Примечание. "Склеить" строки можно также при помощи функции
Concat(Str1, Str2,..., StrN).
Сравнение
Паскаль позволяет выполнять операции сравнения двух строк. Сравнение происходит посимвольно слева направо: сравниваются коды соответствующих символов до тех пор, пока не нарушится равенство или не кончится одна из строк (или обе сразу), при этом сразу делается вывод о знаке неравенства. Две строки называются равными, если они равны по длине и совпадают посимвольно.
Пример
'Balkon'<'balkon'(Ord(' B' )<Ord('b'));
'balkon'>'balken'(Ord('o')>0rd('e')) ;
'balkon'>'balk' (длина первой строки больше);
'кошка '>'кошка' (длина первой строки больше);
'кот'='кот' (равны по длине и совпадают посимвольно).
Можно использовать любые операции отношения (>, <, =, <>, >=, =<) и их комбинации в условных операторах. Их результат − это одно из двух значений: True или False.
Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа Char.
Стандартные процедуры и функции
Паскаль предоставляет в распоряжение программиста целый ряд встроенных функций и процедур, предназначенных для обработки строк. Рассмотрим наиболее важные из них.
Удаление
Для удаления из строки фрагмента используется процедура Delete(Str, n, m), которая вырезает из строки Str m символов начиная с n−го, таким образом, сама строка изменяется.
Пример
Str1:='ABCDEFGH';
Delete(Str1, 3, 4);
Writeln(Str1);
После выполнения этих операторов из строки будут удалены 4 символа начиная с 3−го, то есть строка будет такой: Str1='ABGH'.
Вставка
Для вставки подстроки в строку используется процедура Insert(Str1, Str2, n), которая вставляет строку Str1 в строку Str2 начиная n−го символа, при этом первая строка остается такой же, как и была, а вторая получает новое значение.
Пример
Str1:='ABCDEFGH';
Str2:='abcdefgh';
Insert(Str1, Str2, 3);
В результате выполнения данной процедуры строка будет такой: Str2='abABCDEFGHcdefgh'. Этот же результат будет и после выполнения такой последовательности операторов:
Str2:='abcdefgh';
Insert(‘ABCDEFGH’, Str2, 3);
Копирование
Функция Copy(Str, n, m) копирует m символов строки Str начиная с n−го символа, при этом исходная строка не меняется
Пример 1
Str1:='ABCDEFGH';
Str2:='abcdefgh';
Str3:=Copy(Str1, 4, 3);
Writeln(Str3);
Writeln(Copy (Str2, 4, 3));
Значение переменной Str3='DEF'. А на экран будут выведены следующие строки:
DEF
def
Пример 2
Предскажите результат работы программы.
Program Example_127;
uses crt;
var a, b, c, d, e: string[15];
begin
clrscr;
a:='стихотворение';
b:=copy(a, 1, 4);
c:=copy(a, 2,4);
d:=copy(a, 6, 8);
e:=copy(a, 7, 3);
writeln(b, ', ',c, ', ',d, ', ',e);
readln;
end.
Длина строки
Под длиной строки понимается фактическое (а не максимально возможное!) количество символов в строке. Это значение можно найти при помощи функции Length(Str), результат которой − целое число, равное количеству символов.
Пример
Str1:='ABCDEFGH';
Str2:='мама мыла раму.';
k1:=Length(Str1);
k2:=Length(Str2);
В результате значения целых переменных будут равны: k1=8, k2=15.
Поиск подстроки
Имеется функция, определяющая позицию подстроки в строке, − Pos(Str1, Str2). Результат этой функции − целое число, и оно определяет номер элемента, с которого начинается первое вхождение подстроки Str1 в строку Str2. Если Str1 не входит в Str2, то значение функции равно 0.
Пример 1
Strl:='CDE'; Str2:='ABCDEFGH';
kl:=Pos(Str1, Str2);
k2:=Pos(Str2, Str1);
Значение переменной k1 равно 3, так как строка Str1 входит в строку Str2 с третьего символа, а значение k2 равно 0.
Пример 2
k1:=Pos(' ша',' Наша Таня громко плачет.')
В этом случае значение k1 равно 3, так как функция Pos возвращает номер элемента, начиная с которого подстрока встречается первый раз.
Пример 3
Program Example_128;
uses crt;
var a, b, c: string[100];
m, n: integer;
begin
clrscr;
a:='Жил-был в норе под землей хоббит';
b:='был';
c:='хоббит';
m:=pos(b, a);
n:=pos(c, a);
writeln(b, '-', m); {был-5}
writeln(c, '-', n); {Хоббит-27}
end.
Числа и строки
Часто возникает необходимость получить строковое представление числа и наоборот (например, получить строку '13' из числа 13). Для работы с числами и строками применяются две процедуры.
Str(N, Str1) − переводит числовое значение N в строковое и присваивает результат строке Str1, причем можно переводить как целые числа, так и вещественные.
Примеры
Str(1234, Str1) − после выполнения Str1='1234';
Str (452.567, Str1) − переводим вещественное число с фиксированной запятой, результат Str1='452.567';
Str(4.52567е+2, Str1) − переводим вещественное число в экспоненциальной форме, результат Str1='4.52567e+2',
Вторая процедура выполняет обратное действие. Val(Str, N, К) − переводит строковое значение в числовое. Если данная строка действительно является записью числа (целого или вещественного), то значение К=0, а N − это искомое число, иначе К будет равно номеру первого символа, с которым процедура Val "не справилась".