Существует множество подходов к поиску пиков. Рассмотрим массив данных x []. Для нашего проекта мы определяем пик как элемент массива, который является локальным максимумом, большим, чем каждый из его соседей, в 2 или более раз. Первый и последний элементы в массиве имеют только один сосед и по определению не могут быть пиками. Поэтому, учитывая этот массив X [] с 20 элементами:Печать отсортированных (восходящих) плавающих данных с включенным индексом
0,20 0,50 0,10 0,15 0,20 0,13 0,30 0,25 0,30 0,30 (элементы 0-9)
0,70 0,20 0,45 0,15 0,20 0,85 0,30 0,65 0,20 0,10 (элементов 10- 19)
Пики находятся в точке x [1] = 0,5, x [10] = 0,7, x [12] = 0,45, x [15] = 0,85, x [17] = 0,65.
Для этого проекта вы напишите программу, которая сканирует массив данных, находит пики на основе указанного выше критерия и (для дополнительного кредита) сортирует их в порядке возрастания. Вот что вы должны делать:
Объявите и инициализируйте массив x [] из 20 поплавков.
float [] x = {0.2f, 0.5f, 0.1f, 0.15f, 0.2f, 0.13f, 0.3f, 0.25f, 0.3f, 0.3f, 0.7f, 0.2f, 0.45f, 0,15f, 0,2f, 0,85f, 0,3f, 0,65f, 0,2f, 0,1f};
Распечатайте элементы x [], 10 на каждой строке с точностью до 2 знаков после запятой.
Найдите пики в x [] и сохраните их индексы в массиве с пиками [].
Распечатайте индекс и данные для каждого пика в том порядке, в котором они отображаются в x [].
Пока мой код выглядит следующим образом:
float[] x = {0.2f, 0.5f, 0.1f, 0.15f, 0.2f, 0.13f, 0.3f, 0.25f, 0.3f, 0.3f,
0.7f, 0.2f, 0.45f, 0.15f, 0.2f, 0.85f, 0.3f, 0.65f, 0.2f, 0.1f};
int numPeaks = 0; // Amount of peaks found.
int[] peaks = new int[x.length];
System.out.println("Data array:"); // Print header.
// Print out data.
for (int i = 0; i < x.length; i++) {
System.out.printf("%.2f ", x[i]);
if (i == (x.length - 1)/2) {
System.out.println();
}
}
System.out.println("\n"); // Double line break.
// Search for peaks and stores them into peaks[i].
// Also counts how many peaks there are.
for (int i = 1; i < x.length - 1; i++) {
if (x[i] > (x[i-1] * 2) && x[i] > (x[i+1] * 2)) {
numPeaks++;
peaks[i] = i;
}
}
// Print number of peaks found.
System.out.println(numPeaks + " peaks found:");
// Print only the peaks found along with their indices.
for (int i = 1; i < x.length - 1; i++) {
if (x[i] > (x[i-1] * 2) && x[i] > (x[i+1] * 2)) {
System.out.printf("%2d", peaks[i]);
System.out.println(" " + x[i]);
}
}
и выход:
Data array:
0.20 0.50 0.10 0.15 0.20 0.13 0.30 0.25 0.30 0.30
0.70 0.20 0.45 0.15 0.20 0.85 0.30 0.65 0.20 0.10
5 peaks found:
1 0.5
10 0.7
12 0.45
15 0.85
17 0.65
и я хочу выход, чтобы выглядеть следующим образом:
Data array:
0.20 0.50 0.10 0.15 0.20 0.13 0.30 0.25 0.30 0.30
0.70 0.20 0.45 0.15 0.20 0.85 0.30 0.65 0.20 0.10
5 peaks found:
1 0.5
10 0.7
12 0.45
15 0.85
17 0.65
Sorted peaks:
12 0.45
1 0.5
17 0.65
10 0.7
15 0.85
17 0.65
Я просто не могу» t похоже, что индексы элементов должны быть привязаны к отсортированным плавающим данным правильно. Спасибо заранее, если кто-то может помочь.
Если есть какая-либо информация, мне не хватает, пожалуйста, просто спросите
В то время как вопросы домашней работы технически по теме при переполнении стека, они __very нахмурились. –