- •Введение в object pascal
- •Лекция 1. Интегрированная Среда и Состав языка Object Pascal
- •1.1 Работа с окнами
- •1.2 Редактирование в Object Pascal
- •1.3 Команды меню
- •1.4 «Горячие» клавиши в Object Pascal
- •1.5 Состав языка
- •1.5.1 Алфавит и ключевые слова
- •1.5.2 Идентификаторы
- •1.5.3 Знаки операций, разделители, выражения и операторы
- •Лекция 2. Описательная часть программы
- •2.1 Структура программы
- •2.2 Описание констант
- •2.3 Описание и использование меток
- •2.4 Комментарии
- •Лекция 3. Описание переменных
- •3.1 Структура раздела описания переменных
- •3.2 Классификация типов данных
- •3.2.1 Целочисленные типы
- •3.2.2 Логический тип
- •3.2.3 Символьный тип
- •3.2.4 Вещественные типы
- •3.3 Описание типов пользователя
- •Лекция4. Выражения
- •4.1 Порядок выполнения операций
- •4.2 Выражения целого типа
- •4.3 Вещественные выражения
- •4.4 Логические выражения
- •Лекция 5. Программы Линейной структуры
- •5.1 Операторы ввода (Read, Readln)
- •5.2 Операторы вывода (Write, Writeln)
- •5.2.1 Форматирование численных значений
- •5.2.2 Вывод строковых, символьных и логических значений
- •5.2.3 Вывод вещественных значений в экспоненциальном формате
- •5.2.4 Расположение данного в поле вывода. Примеры
- •5.3 Оператор присваивания
- •5.4 Составной оператор
- •5.5 Стандартные процедуры и функции
- •5.5.1 Понятие процедуры и функции
- •5.5.2 Описание некоторых стандартных процедур и функций
- •5.5.3 Примеры программ линейной структуры
- •Лекция 6. Операторы ветвления (выбора)
- •6.1 Оператор ветвления if
- •6.2 Оператор множественного выбора (варианта) - case
- •Лекция 7. Операторы организации циклов
- •7.1 Цикл типа for
- •7.1.1 Прямая форма оператора for
- •7.1.2 Обратная форма оператора for
- •7.1.3 Советы для начинающих и примеры
- •7.2 Цикл типа While
- •7.3 Цикл типа Repeat... Until
- •7.4 Дополнительные операторы при программировании циклов
- •7.4.1 Досрочный выход из цикла - break
- •7.4.2 Переход к следующей итерации цикла - continue
- •Лекция 8. Массивы
- •8.1 Одномерные массивы
- •8.2 Сортировка одномерного массива
- •8.3 Массивы с большей размерностью
- •8.4 Констант-массивы
- •8.5 Генератор случайных чисел
- •8.5.1 Описание функции Random
- •8.5.2 Применение случайных чисел при работе с массивами
- •Лекция 9. Строки
- •9.1 Строковый тип
- •9.2 Операции над строками
- •Лекция 10. Записи и множества
- •10.1 Запись
- •10.2 Множества
- •11 Пользовательские процедуры и функции
- •11.1 Описание функции и процедуры
- •11.2 Понятие формальных и фактических параметров
- •11.3 Способы передачи параметров в подпрограмму через заголовок
- •11.4 Область видимости идентификаторов
- •12 Файлы
- •12.1 Основные понятия
- •12.2 Типизированные файлы
- •12.3 Текстовые файлы
9.2 Операции над строками
Возможны строковые присваивания:
S := 'Мама мыла раму';
S : = 'ABC ' ;
S := S1;
При работе со строками допустимо использовать операцию конкатенации (сложения - «+»).
Пример:
Sl := 'ABC’ ;
S2: = 'DEF’ ;
S := S1 +S2;
После выполнения последнего оператора присваивания переменная S будет иметь значение 'ABCDEF'.
Как явствует из примера, сложение строк - это простое их объединение, причем первое слагаемое стоит в новой строке на первом месте, второе - на втором и т. д.
Для работы со строками существует набор специфичных процедур и функций.
Length(S) - функция определяет реальную длину строки (количество символов). Тип результата – integer, тип аргумента S - string.
Примеры:
1)
S : = 'ABCD' ;
t := length (S) ;
После выполнения оператора присваивания целая переменная t будет иметь значение 4 (символа).
2)
S:= 'Мама мыла раму';
t:= length (S) ;
После выполнения последнего оператора присваивания целая переменная t будет иметь значение 14 (символов).
Pos( Sl, S2 ) - функция возвращает число типа byte, равное номеру первой позиции вхождения подстроки S1 в строку S2.
Примеры:
1)
S:= 'ABCDEF';
Sl:= 'CDE';
t := pos(Sl , S);
Переменная t будет иметь значение 3.
2)
S:= 'АВСАВСАВСАВС ‘ ;
S1:= 'BС';
t := pos(S1, S) ;
Переменная t будет иметь значение 2.
Copy ( S, n, l) - функция возвращает подстроку длиной l символов из строки S начиная с символа, имеющего номер позиции n.
Примеры:
1)
S := 'ABCDEFG’ ;
S1 := copy(S, 3, 4);
В данном случае функция возвратит значение 'CDEF'.
2)
S := 'мама мыла раму';
S1 := copy(S, 6, 4);
Функция возвратит значение 'мыла'.
Delete( S, n, l ) — процедура удаляет l символов из строки S, начиная с позиции n.
Примеры:
1)
S := 'ABCDEFG’;
delete (S, 3, 4) ;
После вызова процедуры переменная S будет иметь значение 'ABG'.
2)
S := 'мама мыла раму';
delete (S, 6, 5);
Переменная S будет иметь значение 'мама раму'.
Insert( S1, S2, n ) - процедура вставляет строку S1 в строку S2, начиная с позиции n.
Примеры:
1)
S:= 'ABCDE';
S1:= 'GHIJ’;
Insert(S1, S, 3);
После вызова процедуры Insert переменная S будет иметь значение 'ABGHIJCDE'.
2)
S := 'мама раму';
S1 := 'мыла ';
Insert(S1, S, 6) ;
Переменная S будет иметь значение 'мама мыла раму'.
В отличии от массивов, строки можно выводить на экран и вводить с клавиатуры используя операторы Write и Writeln, Read, Readln.
Примеры:
Write('мама ');
Write('мыла ') ;
S': = 'раму' ;
Writeln (S) ;
Read(S);
Readln(S1) ;
Задача:
С клавиатуры вводится строка символов, в которой некоторая подстрока заключена в круглые скобки. Например:
'ABC(DEFG)HUK' или 'мама (мыла) раму'.
Требуется отделить фрагмент в скобках и вывести его на экран.
program р9_2;
var
S: String;
nl, n2: integer;
begin
Writeln('Введите строку');
Readln(S) ;
{ находим позицию первого вхождения '(' }
nl := pos( '(', S);
{- находим позицию первого вхождения ')' }
n2 := роз( ')', S);
{ по двум позициям определяем длину фрагмента = n2 - nl -1 }
S := copy (S, nl + 1, n2 - nl - 1}; { и вырезаем фрагмент }
Writeln(' Фрагмент строки:', S);
end.
Задача. С клавиатуры вводится строка. Рассматривая ее как предложение, слова в котором разделяются одним или несколькими пробелами, разбить ее на слова, а слова вывести на экран. Каждое с новой строки.
program p9_3;
Const
S: String = 'ABC DEFG HIJ KL';
var
i: integer;
S1: String;
begin
i: = 1;
writeln(' Список слов:');
while i < = length(S) do
begin
{ проходим по возможной цепочке пробелов }
While ( S[i] = ' ') and (i <= length(S)) do i : = i + 1 ;
S1 : = '' ; { S1 – пустая строка }
{ проходим по слову }
While ( S[i] <> ' ') and ( i <= length(S)) do
begin
S1:= S1 + S[i];
i : = i + 1 ;
end;
Writeln(S1);
end;
end.
Для преобразования строковых значений в числовые (целые, вещественные) можно воспользоваться процедурой Val.
Val( S, X, Er) – процедура преобразует строку S в число, которое записывает в переменную X. В процессе перевода строки в число может возникнуть ошибка, например, строка содержит нецифровой символ. Поэтому, в параметр Er записывается значение ноль, если перевод в число прошел успешно и номер символа, на котором перевод был прерван, в обратном случае. Тип параметра Х может быть целым и вещественным, по желанию пользователя. Примеры:
1)
{ X: Integer}
S:= '423' ;
Val (S, Х, Er);
{после вызова процедуры целая переменная X будет иметь
значение 423, а Еr = 0 }
2)
{R: Real}
S:= ‘ 423.5' ;
Val (S, R, Er);
{ Переменная R будет иметь значение 423. 5, а Er = 0 }
3)
{ X: Integer}
S := ' 342ABC ' ;
Val(S, X, Er);
{ после вызова процедуры Ег = 4, на четвертом символе
произошел сбой }
Ниже приведена программа для преобразования строки символов в целое число.
program р9_4;
var
I, Code: Integer;
S: String;
begin
WriteLn('Введите строку для преобразования ');
ReadLn(S);
Val (S , I, Code) ;
{ Если произошла ошибка... }
if Сode <> 0 then Writeln('Ошибка в позиции: ' , Code)
else Writeln( 'Значение= ', I);
end.
Процедура Str преобразует число (целое или вещественное) в символьный вид - строку. Обращение к процедуре - Str ( X, S) , X – целое или вещественное число, S – символьный вид этого числа. При переводе числовых значений можно указывать формат перевода, подобно тому, как мы это делали при вызове Write и WriteLn.
Примеры:
{ Т: Integer }
Str(T: 6, S) ;
{М: Real}
Str(M : 4: 2, S);
Str(T, S);
Str(M, S);
Ниже приведена программа для преобразования произвольного числа в строку.
program p9_5;
const I = -5322;
var
S: string [11] ;
begin
Str(I, S) ;
Writeln(' Число =', S ) ;
end.