Я не уверен, хотите ли вы, чтобы список чисел (в том виде, в котором он был введен) в этом случае нужно изменить в этом примере кодаЯ написал некоторый код для вас, поскольку кажется, что вы не знакомы с базовыми конструкциями, как для циклов: вы упоминали, что повторяли один и тот же код много раз;если я неправильно понял, пожалуйста, не обращайте внимания на этот пост.
Так что, хотя это и не лучшее решение, по крайней мере, этот код демонстрирует некоторые основные приемы и конструкции, на которые я настоятельно рекомендую обратить внимание:
вы хотитечтобы инкапсулировать вашу логику в элементарные функции, определить основные параметры снаружи, предварительно выделить память (вектор) для производительности, использовать логические индексы для фильтрации компонентов матрицы, использовать цикл for для выполнения повторяющихся функций над перечислением данных (лично я предпочитаю более функциональные конструкции,как cellfun, но Matlab ограничен в своем функциональном стиле, и я думаю, что на данном этапе это только добавит путаницы).
numberOfInputs = 20;
[ negativeVec , zeroVec, positiveVec ] = categorizeInputs(numberOfInputs);
function [negVec, zerVec, posVec ] = categorizeInputs(numberOfInputs)
% pre-allocation: not crucial in this case, but a good habit
negPosMat = zeros(numberOfInputs,2 ) ;
% this is just a counter for the number of zeroes: we do not need to store
% the zeroes since there is only one element; it suffices to store the
% number of occurrences
nzeroes = 0;
% for the number of inputs requested
for iNewInput = 1 : numberOfInputs
% ask for next input and store into actual number
actualNumber = input("Insert next number: ");
% udate matrix of positive and negatives and number of zeros
% occurrences
[negPosMat , nzeroes] = updateMatrixOfCategories(actualNumber, negPosMat , nzeroes , iNewInput) ;
end
% create the zero vec (as per user request, but number of occurrences would
% suffice)
zerVec = zeros(nzeroes ,1) ;
% negative numbers are store on first column: extract only the nonzero
% entries
negVec = negPosMat( negPosMat(:,1) ~= 0 , 1 ) ;
% positive numbers are store on second column: extract only the nonzero
% entries
posVec = negPosMat(negPosMat(:,2) ~=0, 2);
end
function [actualMat, nzeroes] = updateMatrixOfCategories(number, actualMat , nzeroes, rowNumber)
if (number == 0)
nzeroes = nzeroes + 1;
elseif number > 0
actualMat(rowNumber , 2 ) = number;
elseif number < 0
actualMat(rowNumber , 1) = number;
end
end