// PascalABC.NET 3.1, сборка 1204 от 24.03.2016 begin var a:=SeqRandom(ReadInteger('n='),-20,20) .Select(i->real(i)).ToArray; a.Println; var b:=a[0]*a.Skip(1).Where(x->x>0).Aggregate(1.0,(p,x)->p*x); Writeln(b); end.
Пояснения по каждому оператору 1. Запрашивается количество элементов в последовательности n, генерируется последовательность из n целых чисел в диапазоне от -20 до 20, затем элементы последовательности преобразуются в вещественное представление и образуют динамический массив а. 2. Элементы массива а выводятся на экран. 3. Первый элемент массива умножается на произведение остальных положительных элементов и результат присваивается переменной b. 4. Значение переменной b выводится на экран. В целях небольшого упрощения предполагается, что n>1 и что среди элементов массива, за исключением первого, имеется хотя бы один положительный элемент. Это связано с тем, что в задании отсутствует описание действий в случае, если вышеописанное предположение окажется неверным.
Переход к вещественному представлению чисел связан с обходом переполнения разрядной сетки при целочисленном умножении для больших значений n.
Над найти расстояние от точки до центра окружности. Прще использовать квадрат расстояния. Если он равен квадрату радиуса, то точка на окружности. Если меньше, то внутри круга. Больше, то вне круга.
var xm,ym,xc,yc,r:real; begin writeln('Введите координаты точки Xm, Ym'); readln(xm,ym); writeln('Введите координаты центра окружности Xc, Yc'); readln(xc,yc); writeln('Введите радиус окружности R'); readln(r); if sqr(r)=sqr(xm-xc)+sqr(ym-yc) then writeln ('На окружности') else if sqr(r)>sqr(xm-xc)+sqr(ym-yc) then writeln ('Внутри круга') else writeln('Снаружи круга'); end.
Тест №1 Введите координаты точки Xm, Ym 4 2 Введите координаты центра окружности Xc, Yc 2 2 Введите радиус окружности R 2 На окружности
Тест №2 Введите координаты точки Xm, Ym 3 1 Введите координаты центра окружности Xc, Yc 2 2 Введите радиус окружности R 2 Внутри круга
Тест №3 Введите координаты точки Xm, Ym -1 -3 Введите координаты центра окружности Xc, Yc 2 2 Введите радиус окружности R 2 Снаружи круга
begin
var a:=SeqRandom(ReadInteger('n='),-20,20)
.Select(i->real(i)).ToArray;
a.Println;
var b:=a[0]*a.Skip(1).Where(x->x>0).Aggregate(1.0,(p,x)->p*x);
Writeln(b);
end.
Тестовое решение:
n= 15
14 17 5 -1 9 -18 2 3 -20 5 -10 0 4 -1 -8
1285200
Пояснения по каждому оператору
1. Запрашивается количество элементов в последовательности n, генерируется последовательность из n целых чисел в диапазоне от -20 до 20, затем элементы последовательности преобразуются в вещественное представление и образуют динамический массив а.
2. Элементы массива а выводятся на экран.
3. Первый элемент массива умножается на произведение остальных положительных элементов и результат присваивается переменной b.
4. Значение переменной b выводится на экран.
В целях небольшого упрощения предполагается, что n>1 и что среди элементов массива, за исключением первого, имеется хотя бы один положительный элемент. Это связано с тем, что в задании отсутствует описание действий в случае, если вышеописанное предположение окажется неверным.
Переход к вещественному представлению чисел связан с обходом переполнения разрядной сетки при целочисленном умножении для больших значений n.
var xm,ym,xc,yc,r:real;
begin
writeln('Введите координаты точки Xm, Ym');
readln(xm,ym);
writeln('Введите координаты центра окружности Xc, Yc');
readln(xc,yc);
writeln('Введите радиус окружности R');
readln(r);
if sqr(r)=sqr(xm-xc)+sqr(ym-yc) then writeln ('На окружности') else
if sqr(r)>sqr(xm-xc)+sqr(ym-yc) then writeln ('Внутри круга') else
writeln('Снаружи круга');
end.
Тест №1
Введите координаты точки Xm, Ym
4 2
Введите координаты центра окружности Xc, Yc
2 2
Введите радиус окружности R
2
На окружности
Тест №2
Введите координаты точки Xm, Ym
3 1
Введите координаты центра окружности Xc, Yc
2 2
Введите радиус окружности R
2
Внутри круга
Тест №3
Введите координаты точки Xm, Ym
-1 -3
Введите координаты центра окружности Xc, Yc
2 2
Введите радиус окружности R
2
Снаружи круга