Первый допустим. 2) k:=10; Не должен быть допустим, поскольку 10 не входит в 0..9. НО...по умолчанию Паскаль игнорирует эту ошибку, позволяя даже 255 присвоить. Третий оператор допустим. 4) k:='5'; недопустимо, потому что нельзя преобразовать тип char в правой части к типу 0..9, являющемуся подмножеством однобайтных целых. 5) k:=ord(d); в таком виде записать нельзя, потому что d нигде не описано. Если предположить, что на месте d находится цифра, то оператор допустим. 6) k:=ord(d)-ord('0'); Как и для 2) - оператор не должен быть допустим... но он допустим. Допустим он будет и в варианте k:=ord(d)-ord(0), даже когда выдаст отрицательные значения.
Все это сужает область возможного применения данных типа "диапазон" и в целом типа "set of ...". не позволяя во многих случаях использовать их для организации эффективных проверок . Например, для можно было бы описать диапазон 6..18 для контроля принадлежности возраста к школьному. Можно было БЫ... но, как выясняется, нельзя.
Function PosBlank(s: string; cursor: integer): integer; {Возвращает позицию первого пробельного символа в строке s, начиная с позиции, указанной cursor. Если такого символа нет, возвращает 0.} var n: integer; begin n := Length(s); while (s[cursor] <> ' ') and (cursor < n) do cursor := cursor + 1; if cursor = n then if s[cursor] = ' ' then PosBlank := n else PosBlank := 0 else PosBlank := cursor end;
function PosNonBlank(s: string; cursor: integer): integer; {Возвращает позицию первого непробельного символа в строке s, начиная с позиции, указанной cursor. Если такого символа нет, возвращает 0.} var n: integer; begin n := Length(s); while (s[cursor] = ' ') and (cursor < n) do cursor := cursor + 1; if cursor = n then if s[cursor] = ' ' then PosNonBlank := 0 else PosNonBlank := n else PosNonBlank := cursor end;
procedure GetWord(s: string; var cursor: integer; var wd: string); {Процедура помещает в wd очередное слово из строки s Начало слова указано в cursor, после завершения процедуры cursor будет указывать на первый пробельный символ, следующий за найденным словом. Лидирующие и хвостовые пробельные символы усекаются. Если слово не найдено, то в wd помещается пустая строка} var n, ibegin: integer; begin n := length(s); if n>0 then begin cursor := PosNonBlank(s, cursor); if cursor > 0 then begin ibegin := cursor; cursor := PosBlank(s, cursor); if cursor > 0 then wd := Copy(s, ibegin, cursor - ibegin) else wd := Copy(s, ibegin, n - ibegin + 1) end else wd := '' end else begin wd:=''; cursor:=0 end end;
var c, cc, w: string; ic: integer; fin, fout: Text;
begin Assign(fin, 'input.txt'); Reset(fin); Assign(fout, 'output.txt'); Rewrite(fout); while not Eof(fin) do begin ic := 1; cc := ''; readln(fin, c); while ic > 0 do begin GetWord(c, ic, w); if w <> '' then cc := cc + ' ' + w end; cc := Copy(cc, 2, length(cc) - 1); writeln(fout, cc) end; Close(fin); Close(fout); end.
2) k:=10; Не должен быть допустим, поскольку 10 не входит в 0..9. НО...по умолчанию Паскаль игнорирует эту ошибку, позволяя даже 255 присвоить.
Третий оператор допустим.
4) k:='5'; недопустимо, потому что нельзя преобразовать тип char в правой части к типу 0..9, являющемуся подмножеством однобайтных целых.
5) k:=ord(d); в таком виде записать нельзя, потому что d нигде не описано. Если предположить, что на месте d находится цифра, то оператор допустим.
6) k:=ord(d)-ord('0'); Как и для 2) - оператор не должен быть допустим... но он допустим. Допустим он будет и в варианте k:=ord(d)-ord(0), даже когда выдаст отрицательные значения.
Все это сужает область возможного применения данных типа "диапазон" и в целом типа "set of ...". не позволяя во многих случаях использовать их для организации эффективных проверок . Например, для можно было бы описать диапазон 6..18 для контроля принадлежности возраста к школьному. Можно было БЫ... но, как выясняется, нельзя.