Public static double CosineBetweenVectors(double[] a, double[] b) { if (a.Length != b.Length || a.Length == 0) throw new Exception("не верные параметры");
double ab = 0; double a_length = 0; double b_length = 0; for (var i = 0; i < a.Length; i++) { ab += a[i] * b[i]; a_length = a[i] * a[i]; b_length = b[i] * b[i]; }
if (a_length * b_length == 0) throw new Exception("Нулевые вектора");
return ab / Math.Sqrt(a_length) / Math.Sqrt(b_length); }
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandomReal(15,-10,10); a.Println;
Writeln('Элементов, больших первого, ',
a.Where(x->x>a[0]).Count)
end.
Пример
1.32138581542363 -7.42206571503639 -8.75516477914302 6.17963798166236 -4.88329186797295 6.02313704603498 -5.68947898023272 -4.43705633023617 2.51164194779081 -3.27493339463833 8.22698325767507 -7.95714398750902 4.07602354608291 -2.3214872238792 4.90172023647545
Элементов, больших первого, 6
{
if (a.Length != b.Length || a.Length == 0) throw new Exception("не верные параметры");
double ab = 0;
double a_length = 0;
double b_length = 0;
for (var i = 0; i < a.Length; i++)
{
ab += a[i] * b[i];
a_length = a[i] * a[i];
b_length = b[i] * b[i];
}
if (a_length * b_length == 0) throw new Exception("Нулевые вектора");
return ab / Math.Sqrt(a_length) / Math.Sqrt(b_length);
}