#define sign(x) ((x) == 0 ? 0 : ((x) > 0 ? 1 : -1))
#define vmul(i,j,k) = ((x[(j)]-x[(i)])*(y[(k)]-y[(j)])-(x[(k)]-x[(j)])*(y[(j)]-y[(i)]))
bool function isConvex(double *x, double *y, int n) {
S = sign(vmul(n-2, n-1, 0));
if ((S1 = vmul(n-1, 0, 1)) != 0 && sign(S1) != S)
return false;
for (int i = 0; i < n-2; i++)
if ((S1 = vmul(i, i+1, i+2)) != 0 && sign(S1) != S )
return false;
return true;
}
Вы складываете a и b, не присвоив им значений. В C/C++ в этом случае в переменных может оказаться произвольный мусор. Нужно писать double a = 0; double b = 0;