Определить, является ли введенное слово идентификатором, т.е. начинается ли оно с буквы в любом регистре или знака подчеркивания и не содержит других символов, кроме букв алфавита (в любом регистре), цифр и знака подчеркивания.
226
248
Ответы на вопрос:
//pascal abc.net 3.1 сборка 1256 var s: string; se1,se2: set of char; i: integer; begin se1: =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_']; se2: =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_','0','1','2','3','4','5','6','7','8','9']; readln(s); if not(lowcase(s[1]) in se1) then begin writeln('не идентификатор'); exit; end; for i: =2 to length(s) do if not(lowcase(s[i]) in se2) then begin writeln('не идентификатор'); exit; end; writeln('идентификатор'); end. пример ввода: _someidentificator пример вывода: идентификатор
Подобные "по-взрослому" решают с так называемых "регулярных выражений". в данном случае регулярное выражение может быть таким: _[a-za-z_\d]+ оно понимается следующим образом. сначала следует символ подчеркивания, за которым минимум один раз должен встретиться любой из символов: латинская буква на верхнем или нижнем регистре, символ подчеркивания или цифра (признак цифры - это \d, но можно было также написать 0-9). "плюсик" как раз и означает "повторить один или более раз". по сути, в квадратных скобках мы просто описали множество, быть может, только не совсем так, как принято в паскале. далее все совсем просто. применение matchvalue к строке порождает подстроку, в которой содержится часть исходной строки, удовлетворяющая регулярному выражению. мы заносим её в строку с именем r. если полученная подстрока совпадает со всей введенной строкой, значит идентификатор корректен. в противном случае мы легко находим точку несовпадения и показываем соответствующий символ. // pascalabc.net 3.1, сборка 1256 от 21.06.2016 begin var s: readlnstring('идентификатор: '); var r: =s.matchvalue('_[a-za-z_\d]+'); if r=s then writeln('корректный идентификатор') else writeln('некорректный символ: ',s[r.length+1]) end. тестовые решения: идентификатор: _a315c_34gamesar5 корректный идентификатор идентификатор: _a315c_34gшamesar5 некорректный символ: ш
Const n=12; m=10; var a: array [1..n,1..n] of integer; i,j: integer; begin for i: =1 to n do begin for j: =1 to m do begin a[i,j]: =12*j-i+1; write(a[i,j]: 4); end; writeln; end; end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
vlada36510.03.2023 01:44
-
livekristinka16.06.2021 23:42
-
akniet821.07.2020 17:49
-
Shbtura0120.07.2021 00:45
-
пельменьярости30.10.2022 03:37
-
marekatyan15.04.2020 07:48
-
nikzyk26.11.2020 16:45
-
Васяян30.09.2022 22:16
-
yokofoku04.01.2021 11:09
-
влад213307.08.2021 06:27
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.