![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процедуры обработки строк.
Для иллюстрации использования переменных, объявленных локально, будут разработаны две процедуры сравнения строк. Эти процедуры имеют два входных параметра файлового типа для строк и символьный параметр результата. Рабочие данные объявляются внутри процедуры.
Рассмотрим задачу сравнения длин строк, сохраненных в файлах F1 и F2. Результат сравнения возвращается в переменной Result: 1, если строка в F1 короче; 2, если строка в F2 короче; 0, если строки равной длины.
Раздел проекта 1 [DP 1]
PROCEDURE Length(VAR F1, F2: TEXT; VAR Result: CHAR); {Result 0, 1, 2 если длина F1 =, <, > длины F2 соответственно. Фактические параметры, соответствующие F1 и F2 должны быть различными} VAR Ch1, Ch2: CHAR; BEGIN {Length} RESET(F1); RESET(F2); WHILE NOT EOF(F1) AND NOT EOF(F2) DO BEGIN READ(F1, Ch1); READ(F2, Ch2) END {Анализировать F1, F2 и установить Result в соответствии с длиной} END {Length}
Раздел проекта 1.1 [DP 1.1]
BEGIN {Анализировать F1, F2 и установить Result в соответствии с длиной} IF EOF(F1) THEN {в F1 уже пусто} IF EOF (F2) THEN {и в F1 и в F2 пусто} Result: = ‘0’ ELSE {в F1 пусто, в F2 еще есть символы} Result: = ‘2’ ELSE {в F1 есть символы, а F2 уже пуст (из условия в WHILE)} Result: = ‘1’ END
Лексикографический порядок строк – это их порядок появления как слов в словаре – алфавитный порядок, где алфавит – набор символов Паскаль-машины. Из двух строк различной длины, имеющих одинаковые последовательности символов, короткая предшествует. Например, †ABC† предшествует †ABCDEF†, но †XYZ† предшествует †YZ†. Определять лексикографический порядок строк простое дело: сравнивать их символы попарно, пока не встретятся неравные символы или одна из строк не закончится. Хотя Lexico предназначена для использования с 1-строками, она может быть использована и для сравнения n-строк. Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Раздел проекта 2 [DP2]
PROCEDURE Lexico(VAR F1, F2: TEXT; VAR Result: CHAR); {Result 0, 1, 2 если лексикографический порядок F1 =, <, > чем F2 соответственно. Фактические параметры, соответствующие F1 и F2, должны быть различными} VAR Ch1, Ch2: CHAR; BEGIN {Lexico} RESET(F1); RESET(F2); Result: = ‘0’; WHILE (NOT EOF(F1) AND NOT EOF(F2)) AND (Result = ‘0’) DO BEGIN READ(F1, Ch1); READ(F2, Ch2); IF (Ch1 < Ch2) OR (EOF (F1)) THEN {Ch1 < Ch2 или F1 короче F2} Result: = ‘1’ ELSE IF (Ch1 > Ch2) OR (EOF (F2)) THEN {Ch1 > Ch2 или F2 короче F1} Result: = ‘2’ END {WHILE} END {Lexico}
Length и Lexico – полезные “кирпичики”, которые можно использовать при разработке приложений, работающих со строками. Программы SelectSort и SelectReverse, разработанные в разделе 4.2 также могут быть преобразованы в процедуры. Эти частицы могут быть преобразованы в библиотеку подпрограмм для работы со строками. Конкретный набор процедур для работы со строками - вопрос вкуса и опыта. По мере использования такой библиотеки и чем больше будет узнано о алгоритмах работы со строками, она может вырасти до мощного средства решения задач. Когда процедуры из библиотеки будут использоваться в проекте, будет удобно включать их имена и комментарий. Комментарий к процедуре в библиотеке должен в основном отражать информацию о том, как используется процедура, т.е. что она делает не как, хотя можно упомянуть и о некоторых моментах реализации важных с точки зрения использования. Например, о том, что вызов процедуры потребует больших затрат процессорного времени. Комментарий должен быть достаточен для корректного использования каждой процедуры. Такой комментарий обычно называют комментарием включения (include comment). Например, если мы включаем в проект Lexico, комментарий может быть следующим:
{Включить PROCEDURE Lexico(VAR F1, F2: TEXT; VAR Result: CHAR); Result 0, 1, 2 если лексикографический порядок F1 =, <, > чем F2 соответственно. Фактические параметры, соответствующие F1 и F2, должны быть различными}
Таким образом, каждая процедура в библиотеке должна начинаться с информации, необходимой для включающего комментария. Заголовок процедуры предоставляет имя и подробную информацию о ее параметрах. Оставшаяся часть включающего комментария должна позволять использовать процедуру без изучения ее текста. Необходимо тщательно описывать ограничения и специальные случаи. Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:— Разгрузит мастера, специалиста или компанию; — Позволит гибко управлять расписанием и загрузкой; — Разошлет оповещения о новых услугах или акциях; — Позволит принять оплату на карту/кошелек/счет; — Позволит записываться на групповые и персональные посещения; — Поможет получить от клиента отзывы о визите к вам; — Включает в себя сервис чаевых. Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе В нашем случае подразумевается, что строки в файлах-параметрах не содержат маркеров строки, к входному файлу применяется RESET, но он не остается в этом состоянии по завершению процедуры, к выходному файлу применяется REWRITE, алиасинг фактических параметров не допускается.
PROCEDURE InString(VAR F1: TEXT); {Создает строку в файле F1 из символов в INPUT до следующего маркера конца строки}
PROCEDURE OutString(VAR F1: TEXT); {Печатает строку в файле F1 в OUTPUT, завершая ее маркером конца строки}
PROCEDURE CopyOpen(VAR F1, F2: TEXT); {Копирует строку из F1 в F2 без выполнения RESET или REWRITE, F1 должен быть подготовлен для чтения, а F2 – для записи. Строка прошлого этих файлов может быть непустой}
PROCEDURE Sort(VAR F1, F2: TEXT); {Помещает в F2 отсортированную строку символов из F1}
PROCEDURE Reverse(VAR F1, F2: TEXT); {Помещает в F2 строку символов из F1 в обратном порядке}
PROCEDURE Concatenate(VAR F1, F2, F3: TEXT); {Создает F3 из символов F1, за которыми следуют символы из F2}
Библиотечные процедуры часто используются при разработке других библиотечных процедур. Например, проект для Concatenate может быть:
PROCEDURE Concatenate(VAR F1, F2, F3: TEXT); {Создает F3 из символов F1, за которыми следуют символы из F2}
{Включаем PROCEDURE CopyOpen(VAR F1, F2: TEXT); Копирует строку из F1 в F2 без выполнения RESET или REWRITE, F1 должен быть подготовлен для чтения, а F2 – для записи. Строка прошлого этих файлов может быть непустой}
BEGIN {Concatenate} RESET(F1); RESET(F2); REWRITE(F3); CopyOpen(F1, F3); CopyOpen(F2, F3) END {Concatenate}
|