/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/ForEducation/CheckedTasks/ctstring.html
215 строк
12 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <H1>Задание на обработку строк</H1> <hr> <h3>Создание программы-заготовки и знакомство с заданием</h3> <p>В качестве примера задания на обработку строк рассмотрим задание String9.</p> <p>Программу-заготовку для решения этого задания можно создать с помощью команды меню «Модули | Создать шаблон программы», кнопки <img border="0" src="gif/Load.gif" width="16" height="17"> или клавиатурной комбинации <b>Shift+Ctrl+L</b>. Эта заготовка будет иметь следующий вид:</p> <blockquote><code><pre> <b>uses</b> PT4; <b>begin</b> Task('String9'); <b>end</b>. </pre></code></blockquote> <p>После запуска данной программы на экране появится <a href="../PT4/window.html">окно задачника</a>:</p> <blockquote> <img border="0" src="gif/string9-1.png"> </blockquote> <p>Данные типа <code>char</code> и <code>string</code> в окне задачника заключаются в <i>апострофы</i>; это позволяет, в частности, отличить числовые данные (например, <code>9</code>) от символьных и строковых данных, содержащих цифры (например, <code>'9'</code>). Кроме того, апострофы дают возможность увидеть <i>пробелы</i>, находящиеся в начале или конце строк. <hr> <h3>Ввод исходных данных</h3> <p>Добавим в программу фрагмент, обеспечивающий ввод исходных данных (мы намеренно ввели данные не в том порядке, в котором они указаны в окне задачника): </p> <blockquote> <code><pre> <b>uses</b> PT4; <b>var</b> n: integer; c1, c2: char; <b>begin</b> Task('String9'); read(c1, c2, n); <b>end</b>. </pre></code></blockquote> <p>Запуск нового варианта программы уже не будет считаться ознакомительным, поскольку в программе выполняется ввод исходных данных. Так как порядок ввода исходных данных является ошибочным, этот вариант решения будет признан неверным и приведет к сообщению «<i>Неверно указан тип при вводе исходных данных</i>»:</p> <blockquote> <img border="0" src="gif/string9-2.png"> </blockquote> <p>Общее правило, определяющее порядок ввода и вывода данных для задачника <b>Programming Taskbook</b> гласит: <i>ввод и вывод данных производится по строкам (слева направо), а строки просматриваются сверху вниз</i>. Иными словами, данные, отображаемые в окне задачника, вводятся и выводятся в том порядке, в котором читается обычный текст.</p> <p>На панели индикаторов, расположенной под информационной панелью, отмечено, что введен всего один элемент исходных данных (из трех), хотя в процедуре <code>read</code> нашей программы были указаны три переменные. Это объясняется тем, что при вводе первой из этих переменных (<code>с1</code>) была обнаружена ошибка несоответствия типа, поэтому задачник не стал анализировать остальные данные, которые программа пыталась ввести. Здесь проявляется еще одно правило задачника <b>Programming Taskbook</b>: <i>при обнаружении первой ошибки ввода-вывода анализ оставшихся исходных данных и результатов не проводится</i>. </p> <p>Исправим нашу программу, изменив порядкок параметров в процедуре ввода:</p> <blockquote> <code><pre> read(n, c1, c2); </pre></code></blockquote> <p>Теперь с вводом данных проблем не возникает, однако из-за того что в программе отсутствует вывод результирующих данных, решение по-прежнему считается ошибочным:</p> <blockquote> <img border="0" src="gif/string9-3.png"> </blockquote> <p>Данная ошибка, в отличие от предыдущей, связана не с вводом исходных данных, а с выводом результатов. Это отмечается в окне задачника двумя способами: цветной маркер ошибки располагается рядом с индикатором вывода, и этим же цветом выделяется заголовок раздела результатов (который в данном случае не содержит никаких данных). </p> <hr> <h3>Формирование и вывод требуемой строки</h3> <p>Для формирования нужной строки воспользуемся операцией <code>+</code> (<i>сцепления</i> строк):</p> <blockquote> <code><pre> <b>uses</b> PT4; <b>var</b> n, i: integer; c1, c2: char; s: string; <b>begin</b> Task('String9'); read(n, c1, c2); s := ''; <b>for</b> i := 1 <b>to</b> n <b>do</b> s := s + c1 + c2; write(s); <b>end</b>. </pre></code></blockquote> <p>Заметим, что в операторе <code>s := ''</code> нет необходимости, так как все глобальные переменные в Паскале автоматически инициализируются «нулевыми» значениями (для числовых данных это обычные нули, для символов — это символ <code>#0</code>, для строк — пустая строка <code>''</code>).</p> <p>Результат выполнения этой программы будет следующим:</p> <blockquote> <img border="0" src="gif/string9-4.png"> </blockquote> <p>Красная звездочка, расположенная в конце выведенной строки, означает, что длина полученной строки превышает длину верной строки. Для того чтобы увидеть на экране всю полученную строку, достаточно подвести курсор мыши к строке со звездочкой; при этом полный текст строки появится во всплывающей подсказке:</p> <blockquote> <img border="0" src="gif/string9-5.png"> </blockquote> <p><b>Замечание.</b> Красная звездочка может появиться и при выводе ошибочных числовых данных. Например, если ожидается целое число в диапазоне от <code>1</code> до <code>99</code>, а получено число <code>10000</code>, то на экране изобразится первая цифра этого большого числа, за которой будет указана красная звездочка: <code>1<font color=red>*</font></code>.</p> <hr> <h3>Верное решение</h3> <p>Ошибка в предыдущей программе возникла из-за неверного указания количества итераций цикла. Действительно, на каждой итерации к строке добавляется по <i>два</i> символа, поэтому после <code>n</code> итераций строка будет содержать <code>2*n</code> символов (а не <code>n</code>, как требуется в задании). <p>Для исправления ошибки достаточно вдвое уменьшить число итераций:</p> <blockquote> <code><pre> <b>uses</b> PT4; <b>var</b> n, i: integer; c1, c2: char; s: string; <b>begin</b> Task('String9'); read(n, c1, c2); s := ''; <b>for</b> i := 1 <b>to</b> n <b>div</b> 2 <b>do</b> s := s + c1 + c2; write(s); <b>end</b>. </pre></code></blockquote> <p>После запуска этого варианта мы получим сообщение «<i>Верное решение. Тест номер 1 (из 5)</i>», а после пяти подобных запусков — сообщение «<i>Задание выполнено!</i>»:</p> <blockquote> <img border="0" src="gif/string9-6.png"> </blockquote> <p><b>Замечание.</b> Приведем другой, более быстрый, способ решения задания String9, в котором результирующая строка заполняется <i>посимвольно</i>, как обычный массив:</p> <blockquote> <code><pre> <b>uses</b> PT4; <b>var</b> n, i: integer; c1, c2: char; s: string; <b>begin</b> Task('String9'); read(n, c1, c2); SetLength(s, n); <b>for</b> i := 1 <b>to</b> n <b>div</b> 2 <b>do</b> <b>begin</b> s[2 * i - 1] := c1; s[2 * i] := c2; <b>end</b>; write(s); <b>end</b>. </pre></code></blockquote> <p>Обратите внимание на процедуру <code>SetLength(s, n)</code>, которая обеспечивает правильную настройку <i>длины</i> результирующей строки <code>s</code>. Без вызова этой процедуры программа работала бы неверно, так как любая глобальная строковая переменная инициализируется пустой строкой, а при работе с отдельными символами строки корректировка ее длины не производится.</p> <hr> <h3>Просмотр результатов выполнения задания</h3> <p>Щелкнув мышью на метке «Результаты (F2)», расположенной в правом верхнем углу окна задачника, или нажав клавишу <b>F2</b>, мы можем вывести на экран <i>окно результатов</i>, в котором будет перечислены все наши попытки решения задачи:</p> <blockquote> <code><pre> String9 a08/09 11:17 Ознакомительный запуск. String9 a08/09 11:18 Неверно указан тип при вводе исходных данных. String9 a08/09 11:21 Выведены не все результирующие данные. String9 a08/09 11:26 Ошибочное решение. String9 a08/09 11:29 Задание выполнено! </pre></code> </blockquote> <p>Для закрытия окна результатов достаточно нажать клавишу <b>Esc</b>. Окно результатов можно отобразить на экране и после закрытия окна задачника и возврата в среду <b>PascalABC.NET</b>. Для этого надо использовать команду меню «Модули | Просмотреть результаты», кнопку <img border="0" src="gif/Results.gif" width="16" height="17"> или клавиатурную комбинацию <b>Shift+Ctrl+R</b>. </p> </body> </html>