Декларация
type
Alpha = set of 'A'..'Z';
просто говорит о том, что Alpha
тип, которому разрешено содержать ноль или более букв между A
и Z
включительно. Это не означает, что переменная этого типа автоматически содержит каждый элемент этого набора; это просто означает, что переменная будет состоять из набора символов внутри этого диапазона.
var
mn: Alpha; // Uninitialized variable that can contain
// characters between 'A'..'Z'.
begin
mn := ['A'..'Z']; // Valid set of every member
mn := ['A', 'C', 'X']; // Valid set of three members
Компилятор правильно говорит вам, что вы не назначили никакого значения для mn
, и, следовательно, вы используете неинициализированный переменную.
BTW, стандартное соглашение в большинстве диалектов Паскаля состоит в том, чтобы вводить типы с T
, чтобы было ясно, что это тип. Итак, имея в виду, вот рабочая версия кода, который вы опубликовали с включенной коррекцией.
program Project1;
uses
crt;
type
TAlpha=set of 'A'..'Z';
var
mn: TAlpha;
begin
clrscr;
mn := ['A'..'Z'];
if ('A' in mn) then
Writeln('A is in mn');
{
My preference to the if statement above - prints true or false
depending on whether the character is in the set, so you get output
either way.
}
WriteLn('A in mn: ', ('A' in mn));
Readln;
end.
Для решения вашего дополнительный вопрос (из комментария ниже):
Чтобы проверить строку, чтобы увидеть, если все символы являются числами («0» .. «9»), вы можете сделать что-то вроде это:
function IsNumeric(const str: string): Boolean;
var
i: Integer;
begin
Result := True;
for i := 1 to Length(str) do
if not (str[i] in ['0'..'9']) then
Result := False;
end;
Сообщение об ошибке означает, что он говорит. Пока вы не выполняете задание на 'mn', вы не должны предполагать, что оно имеет какое-то особое значение. – MartynA