- •1. Структура (состав) языка
- •2. Алфавит
- •3. Лексическая структура языка
- •4. Структура программной единицы
- •5. Стиль записи программ на языке Паскаль
- •6. Типы данных в Паскале
- •6.3 Классификация типов данных в Турбо Паскале
- •6.4 Порядковые типы
- •6.4.2 Булевский (логический) тип
- •Repeat тело_цикла until (логическое_выражение);
- •6.4.3 Целые типы Выделяют целые типы ------------- со знаком – shortint, integer, longint)
- •1 Группа функций:
- •2 Группа функций:
- •3 Группа функций:
- •6.4.4 Перечисляемый тип.
- •6.4.6 Символьный тип
- •6.5 Вещественные типы.
- •7. Выражения в языке Паскаль.
- •10. Вычисление по формулам.
- •10.1 Оператор присваивания .
- •10.2 Характер использования переменных в математике и в программах.
- •10.3 Бесконечности
- •10.4 Нестандартные операции
- •6.6 Строки
- •1) Операции присваивания и сравнения.
- •3) Заполнение строки одним символом
- •4) Стандартные функции и процедуры для работы со строками:
- •5) Подпрограммы преобразования из строкового представления в числовое и наоборот:
- •8. Совместимость и преобразование типов.
- •Совместимость типов
- •8.2 Тип результата арифметических выражений.
- •8.3 Преобразование (приведение) типов и значений.
- •8.3.1 Явное преобразование (приведение) типов.
- •8.3.2 Неявное преобразование или приведение типов.
- •9. Простейший ввод-вывод на Паскале
- •Стандартные файлы Input и Output
- •9.2 Процедуры ввода информации (с клавиатуры.
- •9.3 Процедуры вывода в тр.
- •10. Вычисление по формулам (продолжение)
- •10.6. Уточнение многоместных (n - арных) операций
- •11. Средства языка Паскаль для циклов с известным числом повторений.
- •12. Табулирование функций
- •13. Разветвляющиеся алгоритмы
- •13.1 Таблица ситуаций и команда выбора.
- •13.2 Средства языка Паскаль для программирования разветствляющихся алгоритмов
- •13.4 Описание ситуаций
- •13.5 Запись команды выбора (case) (уточнение таблицы ситуаций) с помощью набора команд ветвления
- •13.6 Запись последовательных команд ветвления в случае, когда соседние зависимые ситуации имеют общие признаки.
- •13.6.1 Восходящий подход
- •13.6.2 Нисходящий подход
- •14. Циклы с неизвестным числом повторений
- •15. Структурированные типы данных. Массивы
- •15.1 Классификация (особенности) структурированных типов данных
- •15. 2. Определение массива
- •15.3 Объявление массива на Турбо Паскале
- •15.4 Хранение элементов массива. Доступ к элементам и частям массива
- •15.5 Уточнение команд обработки массива
- •16. Правила разработки цикла
- •15. 6 Действия над массивами
- •17. Множества.
- •17.1 Множества в Паскале и в математике. Сходства и различия между ними.
- •17.2 Объявление множества на Паскале
- •17.3 Присваивание значений множествам. Конструктор множества
- •17.4 Операции над множествами.
- •17.5 Сравнение множеств.
- •17.6 Применение множеств.
- •18. Вспомогательные алгоритмы (подпрограммы).
- •18.1 Три способа записи повторяющихся команд
- •18.2 Понятие блока
- •18.3 Объекты подпрограммы (то, над чем выполняются действия).
- •18.4 Свойства локальных и глобальных объектов
- •Свойства глобальных объектов:
- •18.5 Выделение памяти под локальные и глобальные переменные
- •18.6 Передача параметров в подпрограммы.
- •Фактические параметры
- •18.7 Подпрограммы, возвращающие значение (функции)
- •18.8 Особенности использования процедур и функций в Турбо Паскале
- •18.9. Побочный эффект (side effect)
- •18.10 Опережающее определение процедур и функций.
- •18.11 Рекурсия и итерация.
- •18.12 Процедуры и функции как параметры.
- •18.13 Директивы подпрограмм
- •Директива forward
- •Директивы far и near
- •Директива external
- •Директива assembler
- •Директива inline
- •Директива interrupt
- •Отладка и тестирование программ, содержащих подпрограммы
- •18.14.1 Нисходящее тестирование и подпрограммы-заглушки
- •18.14.2 Восходящее тестирование и программы-тестеры
- •18.14.3 Рекомендации по отладке программ, содержащих подпрограммы
- •18.14.4 Использование отладчика для трассировки процедур
- •18.14.5 Область действия идентификаторов и переменные в окне Watch
- •18.15. Получение доступа а параметрам командной строки, запуск внешних программ.
- •19. Записи.
- •19.1 Понятие записи. Объявление записи в программе.
- •19.2 Доступ к полям записи.
- •19.3 Оператор with
- •19.4 Действия над записями
- •19.5 Записи с вариантами
- •Замечание1:Порядок частей – именно такой, как показано: фиксированная часть всегда первая (или единственная)
- •19.6 Типизированные константы - записи
- •20. Модули (Unit)
- •20.1 Что такое модуль?
- •20.2 Зачем нужны модули и какие есть средства, аналогтчные (в какой-то мере) модулям
- •Интерфейсная секция
- •Секция реализации
- •Секция инициализации
- •Подключение других модулей к данному (модулю)
- •20.4 Ссылки на описания модуля
- •Пример создания модуля
- •Использование модулей. Режимы Compile, Build и Make при компиляции модулей
- •Косвенные и перекрестные ссылки на модули
- •Пример модуля (стек)
- •Модули и большие программы
3) Заполнение строки одним символом
Строку можно заполнить одним символом:
Var
В качестве 1-го
параметра можно задать номер элемента
строки, с которого надо начинать
заполнение
begin
Fillchar
(s,10,’1’);
Процедура Fillchar имеет три параметра:
1-й задает адрес (строки) , с которого нужно начинать писать выбранный вами символ;
2-й сколько символов нужно написать;
3-й код (или изображение - в апострофах) записываемого символа
Будут выполнены следующие действия: с самого начала запишется 10 кодов символа ‘1’ (код = $31). В эти 10 байтов будет включен байт с индексом ноль, в котором хранится текущая длина строки. Что бы такого не было заполнение строки делается в два этапа:
Var
s : string;
begin
Fillchar (s[1], 10, ’1’); // 1 этап
s[0]:= #10; // 2 этап
end.
4) Стандартные функции и процедуры для работы со строками:
Length(s) – функция возвращает значение типа byte = текущей длине строки.
Concat (s1, s2, s3, ... , s10) - функция сцепления строк выполняется для заданных аргументов (сцепляемых строк) и возвращает значение типа string – сцепленную строку. При выполнении сцепления вторая строка записывается в хвост первой, третья – вв хвост второй и т.д.
Copy (str, start, len) – функция возвращает значение типа string – указанную часть строки:
str - строка, в которой выделяется подстрока.
start - позиция начала выделяемого фрагмента
len - размер выделяемого фрагмента (в символах).
ПРИМЕР. Пусть надо переставить местами левую и правую части строки.
Решение: надо выделить правую часть и добавить к ней справа (сцепить) левую часть.
Var
s: string;
begin
s:= ’abcdef’;
s:= Concat (Copy(s, 4,. 3), Copy(s, 1, 3)); //Первый вартант
или
s:= Copy(s, 4,. 3) + Copy(s, 1, 3)); //Второй вартант
Pos(s1, s2) – функция возвращает позицию (слева направо) в строке s2, с которой в ней первый раз встречается подстрока s1. Если не встречается, то возвращается 0. Эту функцию часто используют для проверки, входит или нет подстрока в строку (если POS возвращает не 0, то входит).
Delete (s, Start, Len) - процедура которая удаляет часть строки:
s -строка, Start - начало, Len - длина
Insert (s1, s2, start) – процедура вставляет подстроку s1 в заданную строку s2, start - позиция начала с которой s1 вставляется в s2.
ПРИМЕР: пусть надо заменить вторую половину первой строки на первую половину второй.
Решение: в Паскале нет операции «заменить», но ее можно реализовать с помощью двух действий: 1) удаление (delete) и 2) вставка (insert).
s1:=
‘abcdef’;
результатам должно быть ‘abc123'
s2:=’123456’;
Выполнение:
delete(s1,
4,3); // удаляем из 1-ой строки правую
(заменяемую) часть
insert(
copy (s2, 1,3) ,
s1,4); // вставляем левую
половину 2-ой строки в коней 1-ой
левая часть строки s2
5) Подпрограммы преобразования из строкового представления в числовое и наоборот:
Процедура вывода числа в строку:
Str(число
[: общая ширина: дробная часть],
строка);
Эта процедура предназначена для преобразования числа в строковое представление.
Параметры:
число – то, что преобразуется;
ширина - общее количество символов, которое отводится для представления числа в пределах строки. Сюда кроме цифр числа включаются а) знак «точка» (отделяет целую часть числа от дробной), б) знак числа, в) символ e (для вещественных чисел); г) знак порядка; д) порядок числа.
дробная часть - сколько знаков после точки с должно быть в изображении числа в виде строки;
строка – принимающая строка.
Str
(2.35:6: 2, s); --> для данного вызова значения
числа 2.35 будет следующим: s= ‘ 2.35’.
Замечание: только при указании и ширины и дробной части вещественное значение попадет в строку в формате с фиксированной точкой (иначе - в формате с плавающей точкой).
Процедура преобразования строки в число:
Val(строка, число, код_ошибки); - процедура возвращает для входной строки типа string или Pchar (с символьным представлением числа) значение этого числа в переменной число.
После выполнения процедуры в параметре код_ошибки находится номер позиции, в которой обнаруживается ошибка преобразования (если все нормально, то возвращается 0).
Чтобы не возникало ошибки преобразования содержимым входной строки может быть только строка, содержащая символы с изображением значения по правилам типа, соответствующего переменной «число».
ПРИМЕР.
Х - переменная целого типа. Следовательно, в строке s не может быть точек, пробелов, символа ‘Е’, символов букв.
ПРИМЕР.
Var
s: string;
x: Real;
i: Integer;
Begin
s:= ‘12.34’;
Val (s,
x, i); // i
будет равно 0, а x будет
равен 12.34
s:= ‘123 ’; // Пробел вызовет ошибку преобразования строки в целочисленную переменную
Val (s, x, i);
После выполнения второй строки программы, значение i=0 (нет ошибок), т.к. ошибок при преобразовании строки в числе не будет и х= 12 .34.
После выполнения 4-й строки i будет равно 4, т.к. в 4-й позиции находится пробел, значение х будет непредсказуемо.
Замечание: наиболее часто эти две процедуры используются для того, чтобы:
вставить изображение (символьное) числа в строку (str);
из изображения строки выделить число (val).
Пример: пусть нужно в середину строки вставить изображение (символьное представление) числа, равного текущему году.
Var
s1, s2 : string;
i, j: integer;
begin
s1 := ’abcdef’;
i := 2016; из s2
str(i, s2); // изображение числа записали в s2 (s2 будет равно ‘2016’)
insert(s2, s1, 4); // результат
s1 = ‘abc2016def’
val(copy(s2,4,4), i ,j ); // i будет равно 2016
end.
Далее - простейший ввод-вывод
