C/C++

С++. Помогите найти ошибку в коде.

#include
#include
using namespace std;
#define N 6// Размер массива
int main()
{
setlocale(LC_ALL, "ru");
int A[N]{};//инициализация массива
for (int i = 0; i < N; i++)
{
cout << "Введите элемент массива" << " " << i << endl;
cin >> A[i];
cout << "Элемент = " << A[i] << endl;

}
for (int i = 1; i < N; i++)
{
if ((A[i] < A[i - 1]) && (A[i] < A[i + 1]))//сравнение элемента с посл. и пред.
{
cout << endl << "min = " << A[i] << endl;
A[i] = A[i] * A[i];
cout << "Квадрат min равен = " << " " << A[i] << endl;
}
}
}
У меня странно считается квадрат локальных минимумов. Почему-то он считает квадрат, когда хотя бы одно условие выполняется, а не оба. В чем ошибка?
1. Надо итерировать 1 < i < N - 1, иначе выход за пределы массива на последнем шаге.
2. Ты на каждом шаге обновляешь значение массива, из-за чего программа в дальнейшем сравнивает уже с ним, а не с оригиналом (A[i] = A[i] * A[i])
Станислав Подольский
Станислав Подольский
3 568
Лучший ответ
Станислав Ростиславович Титков да, квадрату нужно было другое имя присвоить. Теперь все корректно работает
А что именно ты пытаешься сделать? Какова задача?
Если я правильно понял то в
cout << endl << "min = " << A[i] << endl;
A[i] = A[i] * A[i];
cout << "Квадрат min равен = " << " " << A[i] << endl;

убери изменение массива:
cout << endl << "min = " << A[i] << endl;
cout << "Квадрат min равен = " << " " << A[i] * A[i] << endl;
// Так вот правильно работает, то есть выдаёт на экран только строгие локальные минимумы и их квадраты (если они есть, конечно !):
#include <iostream>
using namespace std;
#define N 6
int main()
{
setlocale(LC_ALL, "ru");
int A[N];
for (int i = 0; i < N; i++)
{
cout << "A[" << i + 1 << "] = ?\b";
cin >> A[i];
}
for (int i = 1; i < N; i++)
if ((A[i] < A[i - 1]) && (A[i] < A[i + 1]))
cout << "min = " << A[i] << '\n' <<
"Квадрат min равен = " << A[i] * A[i] << endl;
}