
- •Часть I. Этапы решения задачи на компьютере 7
- •Часть II. Задачи. Алгоритмизация и программирование 15
- •Часть III. Теоретические положения и примеры программ 188
- •Введение
- •Часть I. Этапы решения задачи на компьютере
- •1.1 Постановка и формализация условий задачи
- •1.2 Алгоритмизация задачи
- •1.2.1 Интерпретация объектов
- •1.2.2 Вычислительная схема
- •1.2.3 Вычислительная схема решаемой задачи
- •1.2.4 Составление блок-схемы
- •1.2.5 Трассировка
- •1.3 Составление программы на языке Паскаль
- •1.4 Подготовка текста программы на машинном носителе
- •1.5 Трансляция (компиляция) программы
- •1.6 Компоновка (редактирование связей)
- •1.7 Запуск программы на исполнение
- •1.8 Анализ результатов
- •Часть II. Задачи. Алгоритмизация и программирование классических вычислительных процессов
- •1 Линейный вычислительный процесс
- •1.1 Программирование формул
- •1.2 Формализация и алгоритмизация задачи
- •2 Разветвляющийся вычислительный процесс
- •2.1 Программирование формул
- •2.2 Формализация и алгоритмизация графических задач
- •2 .3 Параметрические задачи
- •3 Циклические вычислительные процессы
- •3.1 Арифметический цикл
- •Вычисление произведения n сомножителей.
- •Табулирование функции на конечном отрезке.
- •3.2 Итерационный цикл
- •Вычисление предела последовательности с заданной точностью.
- •Вычисление суммы бесконечного ряда с заданной точностью.
- •3.3 Арифметические циклы с рекуррентными соотношениями
- •3.4 Итерационные циклы с рекуррентными соотношениями
- •3.5 Двойной вложенный цикл
- •4. Пользовательские алгебраические функции
- •4.1 Применение функции в линейных и разветвляющихся вычислительных процессах
- •4.2 Использование функции в циклических процессах
- •4.3 Табуляция функции
- •5 Одномерные числовые массивы
- •5.1 Работа с компонентами массива
- •5.2 Работа с векторами
- •6 Двумерные числовые массивы
- •6.1 Работа с элементами массива
- •6.2 Работа с векторами и матрицами
- •6.3 Использование процедур и функций для работы с массивами
- •7 Работа со строками
- •7.1 Анализ и преобразование текста строки
- •7.2 Работа со строковыми функциями и процедурами
- •8 Работа со списками
- •8.1 Стеки
- •8.2 Очереди
- •8.3 Бинарные деревья
- •9 Работа с текстовыми файлами
- •10 Работа с файлами записей
- •11 Компьютерная графика
- •12 Анимация изображений
- •Часть III. Теоретические положения и примеры программ
- •1 Вычисление определителя квадратной матрицы
- •2.2 Использование записей для описания таблиц
- •Работа с полями записи
- •Использование оператора with … do
- •Ввод данных в массив записей с клавиатуры
- •2.3 Вложение записей
- •Присвоение значений полям вложенных записей
- •3 Файлы записей
- •3.1 Структура файла
- •3.2 Встроенные процедуры и функции обработки файлов
- •3.3 Организация последовательного доступа к записям файла
- •3.4 Организация прямого доступа к компонентам файла
- •3.5 Создание индексного файла
- •3.6 Работа с файлом произвольного доступа
- •Просмотр файла
- •Редактирование записей
- •Изменение структуры основного файла
- •Использование клавиш для управления программой
- •Удаление записи из файла
- •Добавление записи в файл
- •3.7 Информационное взаимодействие текстовых файлов и файлов записей
- •Экспорт данных. Копирование информации из файла записей в текстовый файл
- •Импорт данных. Копирование информации из текстового файла в файл записей
- •3.8 Запросы к файлам записей
- •Запрос с группировкой
- •4 Графическое программирование
- •4.1 Управление видеорежимом
- •Инициализация видеорежима. Процедура InitGraph
- •Закрытие видеорежима. Процедура CloseGraph
- •Создание графического окна. Процедура SetViewPort
- •Закрытие графического окна. Процедура ClearDevice
- •4.2 Построение графических фигур
- •Построение прямой линии. Процедуры SetColor, SetLineStyle, Line, LineRel, LineTo
- •Построение прямоугольника. Процедуры Rectangle и Bar
- •Построение окружности. Процедура Circle
- •Построение дуги окружности. Процедура Arc
- •Построение эллипса. Процедуры Ellipse, FillEllipse
- •Построение сектора. Процедуры PieSlice, Sector
- •4.3 Корректировка изображения Процедуры GetAspectRatio, SetAspectRatio
- •4.4 Создание пользовательского шаблона заливки
- •Заливка замкнутой области. Процедура FloodFill
- •Построение и окраска произвольного рисунка на примере замка
- •Построение и заливка правильного многоугольника
- •4.5 Работа с текстом
- •Выбор стандартного шрифта. Процедура SetTextStyle
- •Коррекция стандартного шрифта. Процедура SetUserCharSize
- •Вывод числовых величин на экран
- •5 Анимация изображений
- •5.1 Дублирования спрайта цветом фона
- •5.2 Манипулирование фрагментами изображения
- •5.3 Использование страниц видеопамяти
- •6 Сообщения об ошибках
- •6.1 Ошибки стадии компиляции
- •6.2 Ошибки стадии выполнения
- •Ошибки ввода-вывода
- •Фатальные ошибки
- •Библиографический список
7.2 Работа со строковыми функциями и процедурами
В программах обработки текстов широко используются пользовательские строковые функции и процедуры. В этом разделе требуется разработать алгоритм и код для трех строковых функций, соответственно из разделов А), В) и С), и объединить их в пользовательскую библиотеку (модуль - UNIT MyString). Необходимо также создать программу - тест, в которой вызов на исполнение каждой из этих строковых функций реализован посредством выбора из меню.
Предлагаемые ниже строковые функции относятся к числу наиболее употребительных, и, весьма условно, разбиты на три равные группы.
A) Функции общего назначения
Функция - AFTERATNUM(C1, C2: STRING; N1, N2: BYTE): STRING - возвращает хвост строки C1, в которой осуществляется поиск с позиции N2 подстроки C2 с номером вхождения N1. Возвращаются все символы строки C1 после указанного вхождения.
Функция - ALLTRIM(C: STRING): STRING - возвращает строку, полученную из строки C путем удаления ведущих и промежуточных пробелов.
Функция - BEFORATNUM(C1, C2: STRING; N1, N2: BYTE): STRING - возвращает начало строки C1, в которой осуществляется поиск с позиции N2 подстроки C2 с номером вхождения N1. Возвращаются все символы строки C1 до начала указанного вхождения.
Функция - CHARLIST(C: STRING): STRING - возвращает список всех символов, которые встречаются в строке C в порядке их появления и только 1 раз.
Функция - CHARONE(C1, C2: STRING): STRING - ищет повторяющиеся в строке C1 подряд символы и удаляет те из них, которые описаны в строке C2.
Функция - CHARONLY(C1, C2: STRING): STRING - из строки C1 удаляет все символы, которых нет в строке C2.
Функция - CHARREM(C1, C2: STRING): STRING - возвращает строку C1, из которой удалены все символы встречающиеся в строке C2.
Функция - CHARSORT(C: STRING; N1, N2: BYTE; L: BOOLEAN): STRING - возвращает отсортированную строку C. N2 - номер позиции в C, с которой идет сортировка, а N1 - количество литер, которое необходимо сортировать. Сортировка по возрастанию L = TRUE, по убыванию L = FALSE.
Функция - CHARSORTSS(C: STRING; N1, N2: BYTE; L: BOOLEAN): STRING - возвращает отсортированную строку C. C N2 - номер позиции в C, с которой идет сортировка, а N1 - количество литер, которое необходимо сортировать. Сортировка по возрастанию L = TRUE, по убыванию L = FALSE. При сортировке двойные символы исключить.
Функция - IIF(L: BOOLEAN; C1, C2: STRING): STRING - если L = TRUE, то функция возвращает значение C1, если L имеет значение FALSE, то функция возвращает значение C2.
Функция - LEFT(C: STRING; N: INTEGER): STRING - возвращает N левых символов в виде строки, если N > 0, и пустую строку при N ≤ 0.
Функция - LOWER(C: STRING): STRING - возвращает все символы строки С в нижнем регистре.
Функция - RAT(C1, C2: STRING): BYTE - возвращает номер позиции, с которой в строке C2 начинается последнее вхождение подстроки C1.
Функция - REPLICATE(C: STRING; N: BYTE): STRING - возвращает строку C, повторенную N раз.
Функция - RIGHT(C: STRING; N: INTEGER): STRING - возвращает N правых символов в виде строки, если N > 0, и пустую строку при N ≤ 0.
Функция - SPACE(N: BYTE): STRING - возвращает строку из N пробелов.
Функция - STUFF(C1, C2: STRING; N1, N2: BYTE): STRING - возвращает строку символов, которая получена из строки C1 путем удаления позиций с N1 количеством N2, и вставки на это место подстроки C2.
Функция - SUBSTR(C: STRING; N1, N2: INTEGER): STRING - возвращает подстроку строки C с позиции N1 длиной N2. Если N1 < 0, то отсчет начальной позиции идет справа налево.
Функция - UPPER(C: STRING): STRING - возвращает все символы строки С в верхнем регистре.
Функция - VALPOS(C: STRING; N: BYTE): REAL - в текстовой строке C с позиции N выбирает число и преобразует его в вещественную форму. Если число выделить не удалось, то функция возвращает 0.
Функция - STRCMP(C1, C2: STRING): INTEGER – сравнивает строки C1 и C2 и возвращает -1 (если C1 < C2), 0 (если C1 = C2) или 1(если C1 > C2).
Функция - STRRCHR(C: STRING; CH: CHAR): INTEGER – возвращает номер позиции первого вхождения символа CH в строку C справа, если его нет, то функция возвращает 0.
Функция - STRLCHR(C: STRING; CH: CHAR): INTEGER – возвращает номер позиции первого вхождения символа CH в строку C слева, если его нет, то функция возвращает 0.
Функция - STRSPN(C1, C2 : STRING): INTEGER – возвращает номер позиции первого символа в строке C1, отсутствующего в строке C2, если такого символа нет, то функция возвращает 0.
Функция - STRSPE(C1, C2 : STRING): INTEGER – возвращает номер позиции первого символа в строке C1, имеющегося в строке C2, если такого символа нет, то функция возвращает 0.
Функция - WCSTOL(C: STRING, NUM:INTEGER): INTEGER - преобразует строку С в десятичное число с учетом системы счисления NUM.
Функция - CENTER(C1: STRING; CH: CHAR; N: BYTE; L: BOOLEAN): STRING - формирует строку длиной N символов. В центре новой строки расположена строка C1, по краям дополненная символами CH, если L - TRUE. Если L - FALSE, то заполняется CH только левая сторона новой строки.
Функция - CHOOSE(N: BYTE; C1: STRING): STRING возвращает значение из списка, выбранное на основании значения аргумента N. Если N равняется 1, возвращается первый элемент списка C1, если индекс равняется 2, возвращается второй элемент списка и т.п. Список C1 представляет собой строку текста, содержащего перечень альтернативных вариантов возвращаемых подстрок, разделенных запятыми.
Функция - COUNTLEFT(C: STRING; CH: CHAR): BYTE - возвращает количество повторяющихся символов в начале строки C, если CH = ‘’. Если CH равна пробелу, то считается число пробелов.
Функция - ISNOTALPHA(C: STRING): BOOLEAN - возвращает TRUE, если первый символ строки C – не буква латинского алфавита.
B) Функции кодирования и декодирования
Функция - ADDASCII(C1: STRING; N1, N2: BYTE): STRING - возвращает строку, полученную из строки C1 путем прибавления величины N1 к ASCII коду символа этой строки с номером N2.
Функция - NADDASCII(C1: STRING; N1, N2: BYTE): STRING - возвращает строку, полученную из строки C1 путем вычитания величины N1 из ASCII кода символа этой строки с номером N2.
Функция - ASCIISUM(C: STRING): WORD - возвращает сумму кодов символов строки C.
Функция - ASCIIAVG(C: STRING): WORD - возвращает среднее арифметическое кодов символов строки C.
Функция - MAXASCII(C: STRING): WORD - возвращает максимальный из кодов символов строки C.
Функция - MINASCII(C: STRING): WORD - возвращает минимальный из кодов символов строки C.
Функция - CHARADD(C1, C2: STRING): STRING - кодирования строки C1 путем побайтного сложения по модулю 256 со строкой C2. Если строка C2 короче, чем строка C1, то по ее окончании все повторяется с первого символа C2.
Функция - CHARAND(C1, C2: STRING): STRING - преобразования строки C1 путем побитной конъюнкции со строкой C2 (C1[i] and C2[i]).
Функция - CHAREVEN(C: STRING): STRING - возвращает строку, содержащую только четные символы строки C.
Функция - CHARMIRR(C: STRING): STRING - возвращает строку символов, в которой они стоят в обратном (зеркальном) порядке справа налево относительно строки C.
Функция - CHARNOT(C: STRING): STRING - преобразования строки C путем побитной инверсии - not(С[i]).
Функция - CHARODD(C: STRING): STRING - возвращает строку, содержащую только нечетные символы строки C.
Функция - CHAROR(C1, C2: STRING): STRING - возвращает строку, которая получается из строки C1 путем ее побитной дизъюнкции со строкой C2.
Функция - CHARAND(C1, C2: STRING): STRING - возвращает строку, которая получается из строки C1 путем ее побитной конъюнкции со строкой C2.
Функция - CHARXOR(C1, C2: STRING): STRING - возвращает строку, которая получается из строки C1 путем ее обработки строкой C2 операцией XOR.
Функция - EXPAND(C: STRING; CH: CHAR; N: BYTE): STRING - возвращает расширенную строку C путем вставки между соседними символами C литеры CH в количестве N - литер.
Функция - JUSTLEFT(C1, C2: STRING): STRING - осуществляет циклическое передвижение подстроки C2 из начала строки C1 в ее конец. Если C2 = ‘’, то перемещаются все левые пробелы.
Функция - JUSTRIGHT(C1, C2: STRING): STRING - осуществляет циклическое передвижение подстроки C2 из конца строки C1 в ее начало. Если C2 = ‘’, то перемещаются все правые пробелы.
Функция - MEMOTRAN(C1: CHAR; C2: STRING): CHAR - возвращает строку, получаемую из длинной строки C1, в которой символы-пробелы замещаются символами строки C2.
Функция - POSREPL(C1, C2: STRING; N: BYTE): STRING - осуществляет замену символов в строке C1 начиная с позиции N на символы строки C2.
Функция - REMALL(C1: STRING; CH: CHAR): STRING - в строке C1 с первых и последних позиций удалить символа CH.
Функция - REMLEFT(C1: STRING; CH: CHAR): STRING - в строке C1 с первых позиций удалить символы CH.
Функция - REMRIGHT(C1: STRING; CH: CHAR): STRING - в строке C1 с последних позиций удалить символы CH.
Процедура - STRSWAP(C1, C2: STRING): STRING - меняет значения двух строк C1 => С2, и наоборот C2 => С1.
Функция - STRTRAN(C1, C2, C3: STRING; N1, N2: BYTE): STRING - возвращает строку, полученную из строки C1. В строке C1 символы, входящие в C2, заменяются соответствующими символами из строки C2. N1 - номер вхождения символа, с которого нужно делать замену. N2 - количество повторов замены.
Функция - ISALPHA(C: STRING): BOOLEAN - возвращает TRUE, если первый символ строки C - буква латинского алфавита.
Функция - PADLEFT(C: STRING; CH: CHAR; N: BYTE) : STRING - выравнивает строку C по размеру N. Если длина строки C меньше N, то она дополняется слева символами CH.
Функция - PADRIGHT(C: STRING; CH: CHAR; N: BYTE): STRING - выравнивает строку C по размеру N. Если длина строки C меньше N, то она дополняется справа символами CH.
Функция - COUNTLEFT(C: STRING; CH: CHAR): BYTE - возвращает количество повторяющихся символов в начале строки C, если CH = ‘’. Если CH равна пробелу, то считается число пробелов.
Функция - COUNTRIGHT(C: STRING; CH: CHAR): BYTE - возвращает количество повторяющихся символов в конце строки C, если CH = ‘’. Если CH равна пробелу, то считается число пробелов.
С) Функции для работы с предложениями
Функция - ATTOKEN(C1, C2: STRING; N: BYTE): STRING - поиск в строке C1 лексемы (слова) с номером N. Строка C2 представляет собой сцепку возможных разделителей лексем “ .,;:!?/()[]{}#&-+” и другие - по усмотрению программиста.
Функция - CENTER(C1: STRING; CH: CHAR; N: BYTE; L: BOOLEAN): STRING - формирует строку длиной N символов. В центре новой строки расположена строка C1, по краям дополненная символами CH, если L - TRUE. Если L - FALSE, то заполняется CH только левая сторона новой строки.
Функция - CHOOSE(N: BYTE; C1: STRING): STRING возвращает значение из списка, выбранное на основании значения аргумента N. Если N равняется 1, возвращается первый элемент списка C1, если индекс равняется 2, возвращается второй элемент списка и т.п. Список C1 представляет собой строку текста, содержащего перечень альтернативных вариантов возвращаемых подстрок, разделенных запятыми.
Функция - ISLINE(ST: STRING): BOOLEAN - возвращает TRUE, если файл является текстовым и содержит строки, не превышающие 255 байт. Параметр ST представляет собой полный путь и имя исследуемого файла.
Функция - ISLOWER(C: STRING): BOOLEAN - возвращает TRUE, если первый символ строки С является символом нижнего регистра.
Функция - ISUPPER(C: STRING): BOOLEAN - возвращает TRUE, если первый символ строки С является символом верхнего регистра.
Функция - LTRIM(C: STRING): STRING - возвращает строку, полученную из строки C путем удаления всех левых (ведущих) пробелов.
Функция - MAXLINE(ST: STRING): WORD - возвращает максимальную длину строки в текстовом файле. Параметр ST представляет собой полный путь и имя текстового файла.
Функция - MINLINE(ST: STRING): WORD - возвращает минимальную длину строки в текстовом файле. Параметр ST представляет собой полный путь и имя текстового файла.
Функция - AVGLINE(ST: STRING): WORD - возвращает среднюю длину строки в текстовом файле. Параметр ST представляет собой полный путь и имя текстового файла.
Функция - NUMLINE(ST: STRING): LONGINT - возвращает количество строк в текстовом файле. Параметр ST представляет собой полный путь и имя текстового файла.
Функция - NUMTOKEN(C1, C2: STRING): BYTE - возвращает число лексем в строке C1. Строка C2 представляет собой список разделителей лексем.
Функция - PADLEFT(C: STRING; CH: CHAR; N: BYTE) : STRING - выравнивает строку C по размеру N. Если длина строки C меньше N, то она дополняется слева символами CH.
Функция - PADRIGHT(C: STRING; CH: CHAR; N: BYTE): STRING - выравнивает строку C по размеру N. Если длина строки C меньше N, то она дополняется справа символами CH.
Функция - RECOUNT(F: TEXT): WORD - возвращает количество строк в текстовом файле F.
Функция - RTRIM(C: STRING): STRING - возвращает строку, полученную из строки C путем удаления всех правых пробелов.
Функция - TOKENLOWER(C1, C2: STRING; N: BYTE): STRING - возвращает C1 строку, где лексема с номером N начинается со строчной буквы. C2 - список разделителей лексем.
Функция - TOKENUPPER(C1, C2: STRING; N: BYTE): STRING - возвращает C1 строку, где лексема с номером N начинается с прописной буквы. C2 - список разделителей лексем.
Функция - TRIM(C: STRING): STRING - возвращает строку, полученную из строки C путем удаления всех правых и всех левых пробелов.
Функция - COUNTWORD(F: TEXT): WORD - возвращает количество слов в текстовом файле F.
Функция - COUNTLETTERS(F: TEXT): WORD - возвращает количество символов, отличных от пробелов, в текстовом файле F.
Функция – COUNT4let(F: TEXT): WORD - возвращает количество слов из четырех букв в текстовом файле F.
Функция - COUNTART(F: TEXT): WORD - возвращает количество артиклей (a, an, the) в текстовом файле F, содержащем английский текст.
Функция – COUNTNlet(F: TEXT, N:INTEGER): WORD - возвращает количество слов из N букв в текстовом файле F.
Функция - COUNTGL(F: TEXT): WORD - возвращает количество слов, начинающихся на гласную букву (a, e, i, o, y, u) в текстовом файле F, содержащем английский текст.
Функция - COUNTSOGL(F: TEXT): WORD - возвращает количество слов, начинающихся на согласную букву в текстовом файле F, содержащем английский текст.
Функция - COUNTWORD(F: TEXT; TEKWORD:STRING): WORD - возвращает количество вхождений введенного слова TEKWORD в текстовом файле F.
Функция - COUNTSOGLEND(F: TEXT): WORD - возвращает количество слов, заканчивающихся на согласную букву в текстовом файле F, содержащем английский текст.
Функция - COUNTGLEND(F: TEXT): WORD - возвращает количество слов, заканчивающихся на гласную букву (a, e, i, o, y, u) в текстовом файле F, содержащем английский текст.
Функция - COUNTCHAR(F: TEXT; TEKCHAR:CHAR): WORD - возвращает количество вхождений введенного символва TEKCHAR в текстовом файле F.