C/C++

Не получается создать алгоритм на с++

Задание состоит в создании динамического многомерного массива, подобного матрице, найти номера строк, в которых есть положительные элементы, и знаки элементов предыдущей строки заменить на противоположные .
Второй массив, как я поняла, я создала для хранения номеров строк .И тот код, что у меня есть, иногда вместо номеров выдает левое значение .Со знаками строк тоже пыталась что-то сделать, но как-то безрезультатно и максимум, что у меня получилось, это заменять положительные элементы на отрицательные .
Сам код: https://onecompiler.com/cpp/3wf678p35
Садай *****
Садай *****
148
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main() {
// Вводите строк побольше, а колонок поменьше
cout << "Enter size of rows: ";
short rows;
cin >> rows;
cout << "Enter size of columns: ";
short columns;
cin >> columns;
// Выделение памяти
short** arr = new short* [rows];
for (short i = 0; i < rows; ++i) {
arr[i] = new short[columns];
}
// Заполнение матрицы случайными элементами
srand(unsigned(time(nullptr)));
for (short i = 0; i < rows; ++i) {
for (short a = 0; a < columns; ++a) {
arr[i][a] = rand() % 20 - 5;
}
}
// Вывод исходноой матрицы
cout << "\nThe first array:\n\n";
for (short i = 0; i < rows; ++i) {
for (short a = 0; a < columns; ++a) {
cout << setw(3) << arr[i][a];
}
puts("");
}
// Поиск и замена
for (short i = 1; i < rows; ++i) {
short count = 0;
for (short a = 0; a < columns; ++a) {
if (arr[i][a] > 0) {
++count;
}
}
if (count == columns) {
for (short j = 0; j < columns; ++j) {
arr[i - 1][j] *= -1;
}
}
}
// Вывод результатов поиска и замены
cout << "\nThe second array:\n\n";
for (short i = 0; i < rows; ++i) {
for (short a = 0; a < columns; ++a) {
cout << setw(3) << arr[i][a];
}
puts("");
}
// Освобождение ресурсов памяти
for (short i = 0; i < rows; ++i) {
delete[] arr[i];
}
delete[] arr;
system("pause > nul");
}
Аркадий Баранов
Аркадий Баранов
59 598
Лучший ответ
Bacho Lashkhia ИМХО есть положительные элементы != все элементы положительные.
Ни в коем разе не придираюсь.
а зачем второй массив? просто выводи номер и делай замену
Isak Zilberman
Isak Zilberman
56 126
Садай ***** без понятия как еще организовать сохранение данных строк и вывода их отдельно без создания нового массива для них
Подправлено + чуть оптимизировано.
https://onecompiler.com/cpp/3wf6cckvv

Моменты:

Не знаю откуда такое пристрастие к short - вообще в качестве размеров принято использовать size_t, но оставил эту особенность.

В современных C++ компиляторах если нужно использовать библиотеку C time подключается не time.h, а ctime. Но не в этом компиляторе. Более того есть более совершенные генераторы псевдослучайных чисел. См. < random >, но оставил как есть. ( https://docs.microsoft.com/ru-ru/cpp/standard-library/random?view=msvc-160&viewFallbackFrom=vs-2019 )

Ручной ввод отключил т. к. лень. Надо - легко вернете.
ИС
Иван Сапегин
84 764
Садай ***** На счет short : выбираю его исключительно из-за количества занимаемой памяти .Где-то слышала, что её экономия только приветствуется.
На счет size_t : сейчас почитала и все равно очень смутно понимаю в чем его суть .Если правильно поняла, то использует максимально большое количество памяти, чтобы взаимодействовать при необходимости со всем .Так же где-то было сказано, что это результат sizeof оператора, получается, что он битовый.
Поправьте пожалуйста, если не правильно что-то говорю и спасибо за ответ.
Учись прилежнее.
Садай ***** Спасибо, это и пытаюсь делать