How to do it?

7 Ansichten (letzte 30 Tage)
SAYANTAN BHANJA
SAYANTAN BHANJA am 11 Jul. 2017
Kommentiert: RAMAKANT SHAKYA am 8 Feb. 2019
Write a function called halfsum that takes as input an at most two-dimensional array A and computes the sum of the elements of A that are in the lower right triangular part of A, that is, elements in the counter-diagonal (going from the bottom left corner, up and to the right) and elements that are to the right of it. For example, if the input is [1 2; 3 4; 5 6; 7 8], then the function would return 21.
  8 Kommentare
SAYANTAN BHANJA
SAYANTAN BHANJA am 16 Jul. 2017
function [N,r,c]=halfsum(x)
[r,c]=size(x);
if(r>c)
col_size=size(x,1);
zero_row=zeros(col_size,(r-c));
H=[x,zero_row];
s=flipud(H);
d=triu(s);
N=sum(d(:));
end
if(c>r)
col_size=size(x,2);
zero_row=zeros((c-r),col_size);
H=[zero_row;x];
s=flipud(H);
d=triu(s);
N=sum(d(:));
end
if(r==c)
s=flipud(x);
d=triu(s);
N=sum(d(:));
end
end
THANKS A LOT SIR GOT THIS ONE.........THANKS A LOT
Jorge Briceño
Jorge Briceño am 3 Feb. 2018
Hi everyone,
I solved the problem in two ways.
First one, using two for loops.
function [counter] = halfsum (A)
% ii = rows ; jj = columns
[m,n]=size(A);
counter = 0;
col=1;
for ii=m:-1:1
for jj=col:n
counter=counter + A(ii,jj);
end
col=col+1; % This line will add a number to your column value,
% so you will not start in the first column again.
end
counter;
end
Second one, using a for loop and an if statement.
function [counter] = halfsum (A)
% ii = rows ; jj = columns
[m,n]=size(A);
counter = 0;
ii=m;
for jj=1:n
if ii>0 % This contidion is mandatory, otherwise the ii could be equal zero, which will result in an error
counter=counter + sum(A(ii,jj:n)); % Function sum(A(ii,jj:n)) sums all the column in a row.
ii=ii-1; % This is equivalent to a row for loop.
end
end
counter;
end
I hope it helps.
Cheers!

Melden Sie sich an, um zu kommentieren.

Antworten (3)

Image Analyst
Image Analyst am 11 Jul. 2017
Hints. Look at functions size() (to get the size of the matrix), and sum(), tril(), triu(), flipud(), and/or flidlr(). Or simply use a nested for loop for a brute force method.

Srishti Saha
Srishti Saha am 7 Apr. 2018
This code works perfectly for me:
%function to compute sum of lower most right side triangle in an X*2 matrix
function u = halfsum(P)
u1 = P(end:-1:1, 1:end);
u2 = triu(u1);
u = sum(u2(:));
end

RAMAKANT SHAKYA
RAMAKANT SHAKYA am 7 Feb. 2019
Bearbeitet: RAMAKANT SHAKYA am 8 Feb. 2019
function s=halfsum(a)
[m,n]=size(a);
s=0;
a=flip(a);
for r=1:m
for c=n:-1:r
s=s+a(r,c);
end
end
end
  2 Kommentare
Image Analyst
Image Analyst am 8 Feb. 2019
Do not use the built-in function sum() as the name of your variable. Call it theSum or something other than sum.
RAMAKANT SHAKYA
RAMAKANT SHAKYA am 8 Feb. 2019
thank you sir for improving me.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by