Некорректно переносит элементы массива в другой массив
Есть массив arr[a_size] из 10 случайных чисел от -50 до 50 и два других массива, в которые переносятся элементы с основного массива, arr1[a1_size] (для положительных), arr2[a2_size] (для отрицательных). Проблема в том, что иногда не переносятся верхние отрицательные элементы массива arr[a_size] в массив arr2[a2_size]. Прикрепляю код и скриншоты:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(void)
{
srand(static_cast<unsigned int>(time(NULL)));
const int a_size = 10;
int a1_size = 0;
int a2_size = 0;
int arr[a_size];
int arr1[a1_size];
int arr2[a2_size];
cout << "\nArray 'arr' with 10 random numbers from -50 to 50:" << endl;
for (int i = 0; i < a_size; i++) {
arr[i] = rand() % 101 - 50;
cout << "arr[" << i << "] = " << arr[i] << endl;
}
for (int i = 0; i < a_size; i++) {
if (arr[i] >= 0) {
arr1[a1_size++] = arr[i];
}
}
cout << "\nPositive elements of the array 'arr' are transferred to the array 'arr1':" << endl;
for (int i = 0; i < a1_size; i++) {
cout << "arr1[" << i << "] = " << arr1[i] << endl;
}
for (int i = 0; i < a_size; i++) {
if (arr[i] < 0) {
arr2[a2_size++] = arr[i];
}
}
cout << "\nNegative elements of the array 'arr' are transferred to the array 'arr2':" << endl;
for (int i = 0; i < a2_size; i++) {
cout << "arr2[" << i << "] = " << arr2[i] << endl;
}
cout << endl;
system("pause");
return 0;
}
Ответы (2 шт):
Это Вам еще повезло.
Каковы здесь длины массивов arr1 и arr2?
int a1_size = 0;
int a2_size = 0;
int arr[a_size];
int arr1[a1_size];
int arr2[a2_size];
Замените на
int a1_size = 0;
int a2_size = 0;
int arr [a_size];
int arr1[a_size];
int arr2[a_size];
Предлагаю использовать vector:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
int main(void)
{
srand(static_cast<unsigned int>(time(NULL)));
const int a_size = 10;
int arr[a_size];
vector<int> arr1;
vector<int> arr2;
cout << "\nArray 'arr' with 10 random numbers from -50 to 50:" << endl;
for (int i = 0; i < a_size; i++) {
arr[i] = rand() % 101 - 50;
cout << "arr[" << i << "] = " << arr[i] << endl;
}
for (int i = 0; i < a_size; i++) {
if (arr[i] >= 0) {
arr1.push_back(arr[i]);
} else {
arr2.push_back(arr[i]);
}
}
cout << "\nPositive elements of the array 'arr' are transferred to the array 'arr1':" << endl;
for (size_t i = 0; i < arr1.size(); i++) {
cout << "arr1[" << i << "] = " << arr1[i] << endl;
}
cout << "\nNegative elements of the array 'arr' are transferred to the array 'arr2':" << endl;
for (size_t i = 0; i < arr2.size(); i++) {
cout << "arr2[" << i << "] = " << arr2[i] << endl;
}
cout << endl;
system("pause");
return 0;
}
Еще можно записать все значения в один массив того же размера, что и исходный. Просто сначала записать все положительные значения, увеличивая mark_p - размер части массива с неотрицательными значениями. После установить начальное значение mark_n (размер части массива с отрицательными значениями) равным mark_p.
Выводить значения уже из одного массива имея mark_p и mark_n.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(void)
{
srand(static_cast<unsigned int>(time(NULL)));
const int a_size = 10;
int arr[a_size];
int arr1[a_size];
int mark_p = 0;
int mark_n = 0;
cout << "\nArray 'arr' with 10 random numbers from -50 to 50:" << endl;
for (int i = 0; i < a_size; i++) {
arr[i] = rand() % 101 - 50;
cout << "arr[" << i << "] = " << arr[i] << endl;
}
for (int i = 0; i < a_size; i++) {
if (arr[i] >= 0) {
arr1[mark_p++] = arr[i];
}
}
cout << "\nPositive elements of the array 'arr' are transferred to the array 'arr1':" << endl;
for (int i = 0; i < mark_p; i++) {
cout << "arr1[" << i << "] = " << arr1[i] << endl;
}
mark_n = mark_p;
for (int i = 0; i < a_size; i++) {
if (arr[i] < 0) {
arr1[mark_n++] = arr[i];
}
}
cout << "\nNegative elements of the array 'arr' are transferred to the array 'arr2':" << endl;
for (int i = mark_p; i < mark_n; i++) {
cout << "arr2[" << i << "] = " << arr1[i] << endl;
}
cout << endl;
system("pause");
return 0;
}
Для имитации вывода из разных массивов можно так:
cout << "\nNegative elements of the array 'arr' are transferred to the array 'arr2':" << endl;
for (int i = mark_p, j=0; i < mark_n; i++, j++) {
cout << "arr2[" << j << "] = " << arr1[i] << endl;
}
cout << endl;

