Var b,c:boolean; a:integer; begin readln(a); writeln(not odd(a)); if a mod 10 = 7 then b:=true; writeln(b); writeln(not odd(a mod 10)); end.
var r,a:integer; begin read(r,a); if a*a>pi*r*r then writeln('Square') else if a*a<pi*r*r then writeln('Circle') else writeln('Equal'); end.
var m1,m2,v1,v2:integer; begin read(m1,v1,m2,v2); if m1/v1>m2/v2 then writeln('p1>p2') else if m1/m2<m2/v2 then writeln('p1<p2') else writeln('p1=p2'); end.
var a,b:real; begin read(a,b); b*=0.45; if a>b then writeln(b) else if a<b then writeln(a) else writeln('Equal'); end.
Идея алгоритма заключается в том, что для проверки корректности строки мы заводим стек, содержащий в себе открывающие скобки. Посмотрим конкретно на вашем примере:) 1+5+(321-54*[321-321]+21) Мы идём слева-направо, откидывая все символы, не являющиеся скобками, поскольку они нас не интересуют (как это было указано в вашем условии, почему я это и уточнял) Затем, натыкаясь на открывающую скобку, добавляем её в стек. В нашем стеке: "(" Идём дальше, находим открывающую квадратную скобку, кладём в стек В нашем стеке: "([" Дальше видим закрывающую квадратную скобку, т.к. у нас последняя добавленная скобка - [, значит, она закрываёт её. В нашем стеке: "(" Аналогично с круглой скобкой, в итоге в нашем стеке не остаётся ничего, строка корректна:) В остальных случаях: Если программа наткнётся на закрывающую скобку, для которой не найдётся открытой в стеке, причём той же самой (для квадратной - квадратная, для круглой - круглая, для фигурной - фигурная) выходит, выражение некорректно, что мы и выводим в качестве ответа. Само собой, если после выполнения программы останутся незакрывшиеся скобки, значит, это выражение тоже является некорректным. Я не мастер объяснять, но надеюсь, что мой разбор вам:) Исходный код вложен в ответ.
a:integer;
begin
readln(a);
writeln(not odd(a));
if a mod 10 = 7 then b:=true;
writeln(b);
writeln(not odd(a mod 10));
end.
var r,a:integer;
begin
read(r,a);
if a*a>pi*r*r then writeln('Square')
else if a*a<pi*r*r then writeln('Circle')
else writeln('Equal');
end.
var m1,m2,v1,v2:integer;
begin
read(m1,v1,m2,v2);
if m1/v1>m2/v2 then writeln('p1>p2')
else if m1/m2<m2/v2 then writeln('p1<p2')
else writeln('p1=p2');
end.
var a,b:real;
begin
read(a,b);
b*=0.45;
if a>b then writeln(b)
else if a<b then writeln(a)
else writeln('Equal');
end.
Посмотрим конкретно на вашем примере:)
1+5+(321-54*[321-321]+21)
Мы идём слева-направо, откидывая все символы, не являющиеся скобками, поскольку они нас не интересуют (как это было указано в вашем условии, почему я это и уточнял)
Затем, натыкаясь на открывающую скобку, добавляем её в стек.
В нашем стеке: "("
Идём дальше, находим открывающую квадратную скобку, кладём в стек
В нашем стеке: "(["
Дальше видим закрывающую квадратную скобку, т.к. у нас последняя добавленная скобка - [, значит, она закрываёт её.
В нашем стеке: "("
Аналогично с круглой скобкой, в итоге в нашем стеке не остаётся ничего, строка корректна:)
В остальных случаях:
Если программа наткнётся на закрывающую скобку, для которой не найдётся открытой в стеке, причём той же самой (для квадратной - квадратная, для круглой - круглая, для фигурной - фигурная) выходит, выражение некорректно, что мы и выводим в качестве ответа. Само собой, если после выполнения программы останутся незакрывшиеся скобки, значит, это выражение тоже является некорректным.
Я не мастер объяснять, но надеюсь, что мой разбор вам:) Исходный код вложен в ответ.