Задание 1.
program z1;
var a: array[0..14] of integer;
i: integer;
begin
Randomize;
for i:=0 to 14 do a[i] := Random(101) - 50;
for i:=0 to 14 do write(a[i], ' ');
end.
Задание 2.
program z2;
var a, b, c: array[0..19] of integer;
i: integer;
begin
Randomize;
for i:=0 to 19 do begin
a[i] := Random(21) - 10;
b[i] := Random(21) - 10;
c[i] := a[i] + b[i];
end;
for i:=0 to 19 do write(a[i], ' ');
writeln();
for i:=0 to 19 do write(b[i], ' ');
writeln();
for i:=0 to 19 do write(c[i], ' ');
end.
Задание 3.
program z3;
var a: array[0..19] of integer;
i: integer;
begin
a[0] := 1;
a[1] := 1;
for i:=2 to 19 do begin
a[i] := a[i-1] + a[i-2];
end;
for i:=0 to 19 do write(a[i], ' ');
end.
Посмотрим конкретно на вашем примере:)
1+5+(321-54*[321-321]+21)
Мы идём слева-направо, откидывая все символы, не являющиеся скобками, поскольку они нас не интересуют (как это было указано в вашем условии, почему я это и уточнял)
Затем, натыкаясь на открывающую скобку, добавляем её в стек.
В нашем стеке: "("
Идём дальше, находим открывающую квадратную скобку, кладём в стек
В нашем стеке: "(["
Дальше видим закрывающую квадратную скобку, т.к. у нас последняя добавленная скобка - [, значит, она закрываёт её.
В нашем стеке: "("
Аналогично с круглой скобкой, в итоге в нашем стеке не остаётся ничего, строка корректна:)
В остальных случаях:
Если программа наткнётся на закрывающую скобку, для которой не найдётся открытой в стеке, причём той же самой (для квадратной - квадратная, для круглой - круглая, для фигурной - фигурная) выходит, выражение некорректно, что мы и выводим в качестве ответа. Само собой, если после выполнения программы останутся незакрывшиеся скобки, значит, это выражение тоже является некорректным.
Я не мастер объяснять, но надеюсь, что мой разбор вам:) Исходный код вложен в ответ.