Проверить, есть ли заданные символы в "допустимой синтаксической конструкции" - Pascal
Формулировка задачи:
Уважаемые, кто может объяснить в чем ошибка.?
Имеется строка символов введеных с клавиатуры., нужно проверить, есть ли эти символы в "допустимой синтаксической конструкции", то есть, мы берем нашу строку которую ввели, не зависимо от того, числа там, знаки +-/*, или буквы. И ищем их в массиве a, если все символы строки содержатся в этом массиве, то выводится ''допустимо'', иначе ''не допустимо''. Проблема в том, что бы я не вводил, результат всегда ''не допустимо''.
var
s:string;
i,n:byte;
f:boolean;
а:array[0..9000] of char;
begin
writeln('Введите вашу строку символов');
read(s);
n:=length(s);
f:=true;
i:=1;
while(i<=n)and f do
if not ((i=0) and (s[i] in a)) then f:=false
else inc(i);
if f then writeln(Допустимо')
else writeln('не допустимо');
end.Решение задачи: «Проверить, есть ли заданные символы в "допустимой синтаксической конструкции"»
textual
Листинг программы
var dsk,s:string;
i,n:byte;
f:boolean;
begin
writeln('Введите ДСК');
readln(dsk);
writeln('Введите вашу строку символов');
readln(s);
n:=length(s);
f:=true;
i:=1;
while(i<=n)and f do
if pos(s[i],dsk)=0 then f:=false
else inc(i);
if f then writeln('Допустимо')
else writeln('не допустимо');
end.
Объяснение кода листинга программы
- Объявление переменных:
dskиs- строки для хранения вводимых значенийiиn- переменные типа byte для хранения индексов и длины строкиf- логическая переменная (boolean), которая будет использоваться в качестве флага для проверки символов
- Ввод значений:
- Вводится строка
dsk, содержащая допустимую синтаксическую конструкцию. - Вводится строка
s, содержащая символы для проверки.
- Вводится строка
- Проверка символов:
- Вычисляется длина строки
sи сохраняется вn. - Устанавливается начальное значение для переменной
f(флаг) как true. - Устанавливается начальное значение для переменной
iкак 1. - В цикле происходит посимвольная проверка:
- Пока
iменьше или равноnи при этом флагfравен true: - Если символ на позиции
iв строкеsне найден в строкеdsk(с помощью функции pos), то флагfстановится false. - Иначе инкрементируется переменная
i.
- Пока
- Если флаг
fпосле цикла равен true, выводитсяДопустимо, иначене допустимо. Этот код осуществляет проверку наличия всех символов из строкиsв строкеdskи выводит соответствующее сообщение в зависимости от результата.
- Вычисляется длина строки