Проверим по-порядку выполнимость указанных условий. Если все условия выполняются, то переменная Flag логического типа не изменит своего значения. В противном случае эта переменная поменяет свое значение. По этому значению мы определим, является ли заданная последовательность символов правильным именем.
Для установления того факта, буква это или нет, цифра это или нет, заведем две константы, которые будут содержать соответственно все буквы и цифры. Если проверяемый символ является буквой, то значение функции Pos не будет равно 0. Аналогично можно определить, является ли проверяемый символ цифрой.
Приведем текст программы:
Program Problem36_3; Const Bukva = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; Cifra = '0123456789'; Var St:String; Flag:Boolean; i:Byte; Begin Write('Задайте строку символов: '); ReadLn(St); Flag:=True; {Допустим это правильное имя.} {Проверка длины строки.} If (Length(St)>32) Or (Length(St)=0) Then Flag:=False; If Flag Then {Длина правильная, проверяем остальные условия.} If Pos(St[1],Bukva)=0 Then Flag:=False {Первый символ не буква.} Else {Проверка остальных символов.} For i:=2 To Length(St) Do If Not ((Pos(St[i],Bukva)<>0) Or (Pos(St[i],Cifra)<>0) Or (St[i]='_')) Then Flag:=False; {Текущий символ не буква, не цифра} {и не символ подчеркивания.} If Flag Then WriteLn('Заданная строка - правильное имя') Else WriteLn('Заданная строка не является правильным именем'); End.