Дана квадратная матрица порядка n. Сформировать вектор х, где чередуются положительные и отрицательные элементы из матрицы (вектор х начинается с отрицательного элемента)
(задача решается только с использованием массивов, процедур)
Я думаю вначале нужно найти первый отрицательный элемент, тогда в векторе х положительные элементы будут занимать чётные позиции ( а как реализовать насчёт позициий - не знаю)
И ещё: число положительных и отрицательных не во всех случаях равно, эти варианты то же нужно учесть или этого можно избежать?
Подскажите пожалуйста!!!
Ну, начать-то наверное, надо с того, что посчитать количество отрицательных элементов матрицы... Тогда ты сможешь сделать один простой цикл (пройти по матрице, в случае положительного элемента увеличивая индекс положительных, четный, на 2 или 1 в зависимости от количества отрицательных элементов в матрице; аналогично - для отрицательных индексов...)
Объяснить - гораздо сложнее чем сделать, но все же попробуй понять, что тут написано, и реализовать это... Вся программа (с выводом результата) заняла у меня всего 30 строк...
i_neg := 1; { <--- Начальная позиция, с которой пишем отриц. элементы }
i_pos := 2; { <--- Начальная позиция, с которой пишем положит. элементы }
for i := 1 to n do
for j := 1 to n do
if mx[i, j] > 0 then begin
vec[i_pos] := mx[i, j];
{
Если i_pos < 2*neg, то i_pos увеличить на 2, иначе на 1,
ибо больше отриц. эл-тов уже нет
}
inc(i_pos, 1 + byte(i_pos < 2 * neg));
end
{ То же самое, только для отрицательных эл-тов }
else begin
vec[i_neg] := mx[i, j];
inc(i_neg, 1 + byte(i_neg < 2 * pos));
end;
+ byte(i_pos < 2 * neg);
Поскольку если i_pos < 2 * neg есть True, а значение Byte(True) = 1, и Byte(False) = 0, то вот такая конструкция:
inc(i_pos, 1 + byte(i_pos < 2 * neg));
if i_pos < 2 * neg then inc(i_pos, 1 + 1) else inc(i_pos, 1 + 0)
Большое спасибо! Насчёт заполнения вектора - я всё поняла (урааа!!! )
Но у меня возник очень глупый вопрос: а как вывести элементы сформированного вектора? ( ведь когда заполняем вектор отрицательными элементами использовали vec[i_neg], а с положительными vec[i_pos]
Ну, и что? Это ведь ты для заполнения использовала эти индексы... А после заполнения просто проходи от 1 до N*N и распечатывай все подряд...