Спецификация
1. Назначение: ввод исходной строки с клавиатуры и контроль за тем, что она состоит из русских букв и пробелов, разделяющих слова. Оканчивается строка точкой, после которой символы не обрабатываются. При успешном вводе строки формируется значение истина, при неуспешном – ложь. Строка подготавливается для дальнейшей обработки – удаляются завершающая точка и все символы, следующие за ней, в конец вставляется пробел (для того, чтобы каждое слово оканчивалось пробелом), подавляются повторяющиеся пробелы (для того, чтобы слово оканчивалось только одним пробелом).
2. Имя: control
3. Вид: функция
4. Перечень параметров
Таблица 21.4. Перечень параметров
Статус | Назначение | Имя | Тип | Вид |
Выход | Заданная вводом строка | s | string | параметр-переменная |
Вход | Множество символов, из которых может состоят вводимая строка (исключая точку и символы, расположенные после нее) | simb | tsetchar | параметр-константа |
Возвращаемый результат | Признак правильности ввода строки (истина –успешный ввод, в противном случае –ложь) | control | boolean | - |
Примечание: type tsetchar=set of char;
5. Заголовок п/п:
function control(var s:string; const simb: tsetchar):Boolean;
Метод решения
1. Ввод с клавиатуры строки s;
- Если точка отсутствует в строке или располагается в ее начале, то формируются возвращаемый результат со значением ложь и пустое значение выходной строки и осуществляется выход из подпрограммы
;
- Для дальнейшей обработки исходная строка усекается на месте завершающей точки и в конец добавляется пробел, который является признаком окончания слова
s:=copy(s,1,pos('.',s)-1) + ' ';
- В исходной строке удаляются повторяющиеся пробелы – между словами остается по одному пробелу. Это осуществляется с помощью подпрограммы замены в заданной строке фрагмента из двух подряд идущих пробела на один пробел
redfrag(s,' ',' ');
- Перебираются все символы и проверяется их принадлежность множеству возможных символов simb. Если очередной символ не принадлежит этому множеству то формируются возвращаемый результат со значением ложь и пустое значение выходной строки и осуществляется выход из подпрограммы
;
- Успешное завершение ввода строки
control:=true
Информационная модель
Таблица 21.5. Информационная модель
Назначение | Имя | Тип |
Индекс символа в строке | i | integer |
Программная модель
function control(var s:string; const simb:tsetchar):boolean;
var i:integer;
begin
{ввод строки с клавиатуры}
writeln('Исходная строка?');
readln(s);
{проверка наличия и местоположения точки; если точки нет или она стоит в начале строки, то формируем ошибку при вводе и выходим из подпрограммы}
if pos('.',s)<=1 then
begin
control:=false;
s:='';
exit
end;
{формирование обрабатываемой части строки (до точки) и добавление пробела в конец строки}
s:=copy(s,1,pos('.',s)-1)+' ';
{подавление повторяющихся пробелов – остается по одному пробелу}
redfrag(s,' ',' ');
{перебор всех символов строки и проверка их принадлежности множеству допустимых символов}
for i:=1 to length(s) do
{если очередной символ не входит в множество возможных}
if not (s[i] in simb) then
{ошибочный ввод исходной строки}
begin
control:=false;
s:='';
exit
end;
{успешное завершение ввода строки}
control:=true
end;
Разработка подпрограммы 3
Спецификация
1. Назначение: вычисление количества слов в строке (каждое слово в строке оканчивается одним пробелом)
2. Имя: kolslov
3. Вид: функция
4. Перечень параметров
Таблица 21.6. Перечень параметров
Статус | Назначение | Имя | Тип | Вид |
Вxoд | Исходная строка слов | s | string | параметр-значение |
Возвращаемый результат | Количество слов в строке | kolslov | integer | - |
5. Заголовок п/п: function kolslov(s:string):integer;
Метод решения
- Обнуление счетчика слов
sum:=0;
- Перебор всех символов строки и при обнаружении очередного пробела увеличение счетчика слов на 1, так как пробел является признаком завершения слова
;
- Формирование возвращаемого результата функции
kolslov:=sum
Информационная модель
Таблица 21.7. Информационная модель
Назначение | Имя | Тип |
Индекс символа в строке | i | integer |
Счетчик пробелов | sum | integer |
Программная модель
function kolslov(s:string):integer;
var i,sum:integer;
begin
sum:=0;
for i:=1 to length(s)do
if s[i]=' ' then sum:=sum+1;
kolslov:=sum
end;