В "классическом" языке Паскаль, как его описал Н.Вирт, есть только функции для возведения во вторую степень и извлечения квадратного корня. Поэтому для возведения в любую другую степень используют основное логарифмическое тождество
На паскале это записывается exp(b*ln(a))
В современных реализациях паскаля добавлена функция power(a,b), которая решает проблему.
Итак, "классическая запись" b:=a*a+c*c; { возможно также sqr(a)+sqr(b) } q:=exp(b*ln(cos(a+2.53*c)));
И запись современная b:=a*a+c*c; // возможно также sqr(a)+sqr(b) q:=power(cos(a+2.53*c),b);
Посмотрел решение на С++. Ну что же, я недаром зову его "полуассемблер" - нечего ему в общеобразовательных школах делать... Писать долго, много и непонятно для непосвященных. А сколько при этом можно ошибок сделать - просто жуть. Вот для сравнения решение на Паскале. Я тоже использовал стек, чтобы проще было сравнивать)))
// PascalABC.NET 3.2, сборка 1370 от 24.12.2016 // Внимание! Если программа не работает, обновите версию!
function IsGood(s:string):Boolean; begin var St:=new Stack<char>; foreach var c in s do case c of '(':St.Push(c); ')':if St.Count>0 then St.Pop else begin Result:=false; Exit end; end; Result:=St.Count=0 end;
begin var n:=ReadlnInteger('N='); var s:=ReadArrString(n); s.Select(x->IsGood(x)).Select(x->x?'Good':'Bad').Println(NewLine) end.
Контрольный пример (скобки "разбавлены" числами, чтобы было ясно, что программа не только скобки умеет читать, но и проверять их расстановку в произвольной строке)
N= 4 12(3)456(7)8 123((67)8) 12)34(5 (1(234)567 Good Good Bad Bad
Поэтому для возведения в любую другую степень используют основное логарифмическое тождество
На паскале это записывается exp(b*ln(a))
В современных реализациях паскаля добавлена функция power(a,b), которая решает проблему.
Итак, "классическая запись"
b:=a*a+c*c; { возможно также sqr(a)+sqr(b) }
q:=exp(b*ln(cos(a+2.53*c)));
И запись современная
b:=a*a+c*c; // возможно также sqr(a)+sqr(b)
q:=power(cos(a+2.53*c),b);
Вот для сравнения решение на Паскале. Я тоже использовал стек, чтобы проще было сравнивать)))
// PascalABC.NET 3.2, сборка 1370 от 24.12.2016
// Внимание! Если программа не работает, обновите версию!
function IsGood(s:string):Boolean;
begin
var St:=new Stack<char>;
foreach var c in s do
case c of
'(':St.Push(c);
')':if St.Count>0 then St.Pop
else begin Result:=false; Exit end;
end;
Result:=St.Count=0
end;
begin
var n:=ReadlnInteger('N=');
var s:=ReadArrString(n);
s.Select(x->IsGood(x)).Select(x->x?'Good':'Bad').Println(NewLine)
end.
Контрольный пример (скобки "разбавлены" числами, чтобы было ясно, что программа не только скобки умеет читать, но и проверять их расстановку в произвольной строке)
N= 4
12(3)456(7)8
123((67)8)
12)34(5
(1(234)567
Good
Good
Bad
Bad