import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.useLocale(Locale.US);
// Ввод: n x h a
int n = sc.nextInt();
double x = sc.nextDouble();
double h = sc.nextDouble();
double a = sc.nextDouble();
if (n <= 0) {
System.out.println("n должно быть больше нуля");
return;
}
List<Double> r = new ArrayList<>();
// 1. Формирование массива.
for (int i = 1; i <= n; i++) {
r.add(2.5 * Math.sin(a * x + (double) i * i * h));
}
printArray(r);
// Поиск первого минимального и последнего положительного.
int minIndex = 0;
int lastPositive = -1;
for (int i = 0; i < r.size(); i++) {
if (r.get(i) < r.get(minIndex)) {
minIndex = i;
}
if (r.get(i) > 0) {
lastPositive = i;
}
}
// 2. Удаление отрицательных элементов между границами.
if (lastPositive == -1) {
System.out.println("Нет положительного элемента");
} else {
int left = Math.min(minIndex, lastPositive);
int right = Math.max(minIndex, lastPositive);
for (int i = right - 1; i > left; i--) {
if (r.get(i) < 0) {
r.remove(i);
}
}
printArray(r);
}
// 3. Среднее элементов до первого отрицательного.
double sum = 0;
int count = 0;
while (count < r.size() && r.get(count) >= 0) {
sum += r.get(count);
count++;
}
if (count == 0 || count == r.size()) {
// Либо отрицательный элемент первый,
// либо отрицательных элементов вообще нет.
System.out.println("Нет среднего значения");
} else {
System.out.printf(Locale.US, "Sr=%.3f%n", sum / count);
}
sc.close();
}
private static void printArray(List<Double> r) {
System.out.print("R={");
for (int i = 0; i < r.size(); i++) {
if (i > 0) {
System.out.print("; ");
}
System.out.printf(Locale.US, "%.3f", r.get(i));
}
System.out.println("}");
}
}