Определить, является ли введенное слово идентификатором, т.е. начинается ли оно с буквы в любом регистре или знака подчеркивания и не содержит других символов, кроме букв алфавита (в любом регистре), цифр и знака подчеркивания.
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.
Графические информационные модели Карта как информационная модель. Во-первых, карта описывает конкретную местность, которая является для нее объектом моделирования. Во-вторых, это графическая информация. Карта созда-ется с определенной целью: с ее можно добраться до нужного населенного пункта. Кроме того, используя линейку и учитывая масштаб карты, можно определить расстояние между различны-ми пунктами. Однако никаких более подробных сведений о населенных пунктах, кроме их положения, эта карта не дает. Образные модели Образные модели (рисунки, фотографии и др. ) представляют собой зрительные образы объектов, зафиксированные на каком-либо носителе информации (бумаге, фото- и кинопленке и др.) . Широко используются образные информационные модели в обучении, где требуется классификация объектов по их внешним признакам (вспомните учебные плакаты по ботанике, биологии и физике) . Информационные модели. Информационные модели представляют объекты и процессы в образной или знаковой форме, а также в форме таблиц, блок-схем, графов и т. д. Материальные модели. Предметные модели позволяют представить в материальной наглядной форме объекты и про-цессы, недоступные для непосредственного исследования (очень большие или очень маленькие объекты, очень быстрые или очень медленные процессы и др.) . Материальные и информационные модели Все модели можно разбить на два больших класса: материальные модели и информационные мо-дели.
Microsoft QBasic m = 10 n = 15 DIM a(1 TO m, 1 TO n) AS INTEGER DIM x(1 TO n) AS INTEGER, y(1 TO m) AS INTEGER RANDOMIZE TIMER CLS PRINT "Исходная матрица" FOR i = 1 TO m FOR j = 1 TO n a(i, j) = INT(99 * RND) PRINT USING "###"; a(i, j); NEXT j PRINT NEXT i INPUT "Строка для Х и столбец для Y (через запятую): ", p, q PRINT "Вектор-строка Х" FOR j = 1 TO n x(j) = a(p, j) PRINT USING "###"; x(j); NEXT j PRINT PRINT "Вектор-столбец Y" FOR i = 1 TO m y(i) = a(i, q) PRINT USING "###"; y(i); NEXT i PRINT
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
Пример вывода:
Идентификатор