Run-Time Check Failure #2 - Stack around the variable 'x' was corrupted
Задание звучит так: массив из 5 рандомых чисел от 0 до 50 и отсортировать числа на непарных местах по возрастанию методом простого обмена в массиве. Итак, проблема заключается в том, что, хоть какие значения я не ставил бы, оно всегда выдает ошибку. Началось всё с того, что я сделал просто массив, который, вроде бы, работал, но всё равно выдавал эту ошибку, я решил, что, когда добавлю сортировку, то всё решится, но нет, оно не сортирует, и после "сортировки" числа заменяются на другие и вообще не по возрастанию. https://prnt.sc/10rv4tx
#include <math.h>
#include <conio.h>
#include <cstdlib>
#include <stdlib.h>
using namespace std;
int main()
{
const int n = 6;
double x[n] = { };
int i, nmax, j,p;
cout << "Before: ";
for (i = 0; i < 5; i++) {
x[n] = rand() % 51;
cout << x[n] << "\t";
}
cout << endl;
for (i = 1; i < n - 1; i++);
{
nmax = i;
for (j = i + 1; j < n; j++) {
if (x[n] < x[nmax])
nmax = j;
p = x[i];
x[i] = x[nmax];
x[nmax] = p;
}
}
cout << "After: ";
for (i = 0; i < 5; i++) {
x[n] = rand() %51;
cout << x[n] << "\t";
}
}
Помогите, пожалуйста.
Ответы (1 шт):
Не совсем поняла каким именно нужно методом отсортировать, но предположила два варианта: и так, и то, что закомментировано - работает
#include <math.h>
#include <conio.h>
#include <cstdlib>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
const int n = 6;
double x[n] = { };
int i, nmax, j, p, min;
cout << "Before: ";
for (i = 0; i < 5; i++) {
x[i] = rand() % 51;
cout << x[i] << "\t";
}
cout << endl;
//Метод пузырька:
/*for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n - 1; j++) {
if (x[i] > x[j]) {
p = x[i];
x[i] = x[j];
x[j] = p;
}
}
}*/
//Метод выбора:
for (i = 0; i < n; i++) {
min = x[i];
p = i;
for (j = i + 1; j < n - 1; j++) {
if (x[j] < min) {
min = x[j];
p = j;
}
}
nmax = x[i];
x[i] = x[p];
x[p] = nmax;
}
cout << "After: ";
for (i = 0; i < 5; i++) {
cout << x[i] << "\t";
}
}