What is wrong with this?

3 views (last 30 days)
DJ V
DJ V on 16 Dec 2016
Commented: Jan on 16 Dec 2016
I need to be able to determine what my code is producing.
It yields:
How do I look into the cells that are listed to get it to print out the results?
The code that produces this is:
function SQUARE = logipack( V)
% Find the size of the input matrix
[m,n] =size(V);
SQUARE = cell(m,1);
for r=1:m
for c=1:n % note here that I am using n and not m like in your code
% create an empty array
counter=0;
if V(r,c) > 0
counter = c;
end
if counter >=1
SQUARE{r,counter}=cell(counter);
end
end
end
end
This problem is described as:
%
  2 Comments
DJ V
DJ V on 16 Dec 2016
Note: This code doesn't seem to work. Can anyone advise me?
Geoff Hayes
Geoff Hayes on 16 Dec 2016
DJ - rather than posting duplicate questions, why not further the conversation at http://www.mathworks.com/matlabcentral/answers/317062-told-to-ask-a-new-question-why-won-t-this-work?

Sign in to comment.

Accepted Answer

Jan
Jan on 16 Dec 2016
Edited: Jan on 16 Dec 2016
A cell vector is wanted. SQUARE{r,counter} creates a cell matrix.
function S = logipack( V)
m = size(V, 1);
S = cell(m, 1);
for r = 1:m
data = find(V(r, :)); % [EDITED]
if ~isempty(data)
S{r} = data;
end
end
end
  2 Comments
DJ V
DJ V on 16 Dec 2016
Edited: DJ V on 16 Dec 2016
But the empty matrix where applicable must be a 0x0 matrix. This code returns a 1x 0 matrix. I attempt to fix, but it gives me an error and proclaims that the matrix dimensions don't agree. The code returns a 1x0 matrix for an empty row.
function S = logipack( V)
m = size(V, 1);
S = cell(m, 1);
for r = 1:m
S{r} = find(V(r, :));
if find(V(r,:))==[]
S{r}= [];
end
end
end
Jan
Jan on 16 Dec 2016
See [EDITED]

Sign in to comment.

More Answers (1)

DJ V
DJ V on 16 Dec 2016
I modified code to:
function SQUARE = logipack( V)
% Find the size of the input matrix
[m,n] =size(V);
SQUARE = cell(m,1);
for r=1:m
for c=1:n % note here that I am using n and not m like in your code
% create an empty array
counter=0;
if V(r,c) > 0
counter = c;
end
if counter >=1
SQUARE{r,counter}=counter;
end
end
end
end
This produces:
This appears to be correct.
But the grader says my result is wrong for [1 0; 0 1].
Why?
  2 Comments
DJ V
DJ V on 16 Dec 2016
Sorry, it says its wrong for [0 1; 1 0].
Steven Lord
Steven Lord on 16 Dec 2016
The assignment says the output should be a logical array. The output from your function is a cell array. A cell array could contain a logical array, but it is not itself a logical array.
C = {true false true};
isa(C, 'logical') % it is not a logical array
isa(C{1}, 'logical') % it contains a logical array

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!