MATLAB Answers

0

Need help using a for loop

Asked by James Bell on 30 Apr 2011
My program reads data from a file column 1 is an ID number, column 2 is a weight, column 3 is the priority. Supplies must be loaded on to a ship (capacity 60 tons) by priority.
On the second for loop I would like to start the loop where my computed ID's end (not 1). (So i can search for the remaining weight needed by priority without finding an ID that i already have).
With that being said, any other advice to make my code more efficient would be greatly appreciated.
function [] = Supplies(filename)
%A = load(filename);
A = load('data1.txt'); % TESTING
A = sortrows(A,-3);
%p = A(:,3); %Priority of supply
%w = A(:,2); %Weight of supply
%id = A(:,1); %ID of supply
tons = 0;
tonsN=0;
ID = zeros(1);
cnt =1;
for i = 1:1000
if (tons < 60)
tonsN = A(i,2);
tons = tons + tonsN;%TESTING
ID(cnt) = [ A(i,1)];
cnt = cnt+1;
else
ID(end)=[];
%disp(ID')TEST
tons = tons - tonsN;%TESTING
break
end
end
tonsNEED = 60-tons;
tons%TEST
tonsNEED%TEST
for i = 1:1000
if A(i,2) == tonsNEED
ID(end+1) = A(i,1);
break
end
end
disp(ID') %TEST
end
%First, my code sorts the supplies by priority, highest to lowest, using sortrows.
%Then, through a for loop, the weights are added, starting from highest
%priority, untill it is greater than 60. Once greater than 60 I subtract the
%last item so it is within the 60 ton limit. To find a supply to fit the
%remaining capacity, another for loop is used to find a weight that matches
%the weight needed by priority

  0 Comments

Sign in to comment.

1 Answer

Answer by Héctor Corte on 11 Jan 2012

Your first for should be:
for i=1:length(A(:1))
and your second for should be:
for i=length(ID):length(A(:1))
And the if inside the second for should have < instead of ==.
You can precharge variable ID to make code faster, but then you need other for loops.

  0 Comments

Sign in to comment.