Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

# 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

1 visualización (últimos 30 días)
Will Gotcher el 7 de Sept. de 2016
Cerrada: Image Analyst el 13 de Jun. de 2020
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 9], then the function would return 38.
This is all I have so far:
function sum=halfsum(v)
sum=0;
[row col]=size(v);
for i= 1:row;
for j=1:col;
I have spent hours on trying to figure out how to sum the reverse diagonal starting at the bottom left element and everything to the right of it and cannot seem to figure it out. Any help is greatly appreciated!
##### 6 comentariosMostrar 4 comentarios más antiguosOcultar 4 comentarios más antiguos
TINOY SANTRA el 13 de Jun. de 2020
i did this code and it worked fine
Image Analyst el 13 de Jun. de 2020
Do not post up here. If you think that none of the 18 answers below and 2 answers above answer the question and that your answer offers something unique, then you can reopen the question to post your answer that is different than the prior 20 solutions.

James Tursa el 7 de Sept. de 2016
Editada: James Tursa el 7 de Sept. de 2016
Ask yourself, "what does it mean to be in the lower right triangle" in terms of i and j? I.e., what test could you make on i and j to determine if you were in the lower right triangle? Then code that up inside your for loops. E.g.,
mysum = 0; % <-- Changed sum to mysum since sum is the name of a MATLAB function
[row,col] = size(v);
for i= 1:row
for j=1:col
if( in lower right triangle ) % <-- you put test code inside parentheses
mysum = mysum + v(i,j);
end
end
end
So, you just need to figure out a test you can make on i and j to determine if you are in the lower right triangle, and insert that code inside the parentheses as noted above. If you can't figure this out immediately, write down all of the i,j pairs for a small matrix on a piece of paper and then look for a pattern that you can exploit and code up that isolates the lower right triangle. Do an example for both a square and non-square matrix to make sure the code you come up with works in both cases.
SIDE NOTE: There are ways to do this without a double for loop, but you should first learn how to do this with for loops.
##### 2 comentariosMostrar NingunoOcultar Ninguno
Will Gotcher el 20 de Sept. de 2016
Hey James,
Late response I know. Thanks for the reply. That is roughly the code I had at the time of posting the question. Do you have any tips how I can single out the bottom right triangle? I have spent several full days trying to figure this out and just cannot get it. Thanks!
Image Analyst el 21 de Sept. de 2016
Uh Will, you could use my code. Did you even see it or try it??? It only accesses elements in the lower right triangle.

### Más respuestas (17)

Vikrant Prasad el 22 de Mzo. de 2019
function summa = halfsum(A)
[row, col]=size(A);
sum=0;
for i=1:row
for j=i:col
if i<=j
sum= sum + A(i,j);
end
end
end
summa =sum;
end
##### 3 comentariosMostrar 1 comentario más antiguoOcultar 1 comentario más antiguo
Image Analyst el 31 de Mzo. de 2019
Editada: Image Analyst el 31 de Mzo. de 2019
Did you try
if i>=j
and it didn't work??? Or did you do
summa = sum(A(triu(A)))
You didn't use sum for the name of the variable, contrary to what I said in my answer, did you??
Please attach the code so we can check why it's not working.
mayank ghugretkar el 10 de Jun. de 2019
another similar way
1. with for loop
function summa=halfsum(A)
[row col]=size(A);
summa=0;
j=0;
for i=1:row
for j=1:col
if j>=i
summa= A(i,j) +summa;
end
end
end
end
2. with While loop
function summa=halfsum(A)
[row col]=size(A);
summa=0;
for i=1:row
j=i;
while (j>=i && j<=col)
summa= A(i,j)+ summa;
j=j+1;
end
end
summa;
end
i love trying this things... simplifying n solving

Prashanth Reddy Penta Reddy el 25 de Mayo de 2017
function u = halfsum(P)
u1 = P(end:-1:1, 1:end);
u2 = triu(u1);
u = sum(u2(:));
end
##### 3 comentariosMostrar 1 comentario más antiguoOcultar 1 comentario más antiguo
William Gallego el 3 de Nov. de 2018
Editada: William Gallego el 3 de Nov. de 2018
Great, I understood both ways. Actually, I spent most of my time trying to figure out the loop for ii=m:-1:1. I forgot to count backward :(. Thanks for the help!
Mukti Awad el 16 de Ag. de 2019
I am getiing this error!!!
Assessment result: incorrect[1 2 3; 4 5 6; 7 8 9]
Variable summa has an incorrect value.

Nijita Kesavan Namboothiri el 26 de Jun. de 2019
function summa=halfsum(m)
summa=0
[r c]=size(m)
for i=1:r
for j=1:c
if i<=j
summa=summa+m(i,j)
end
end
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Image Analyst el 7 de Sept. de 2016
Try
theSum = 0; % DON'T USE sum as a variable name!!!
[rows, columns] = size(v);
for row = 1 : rows
for col = (columns - row + 1) : columns
theSum = theSum + .......
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Justin Whetten el 13 de Dic. de 2016
For anyone who might be struggling still with this
function sum=halfsum(A);
sum = 0;
[row,col] = size(A);
for i= 1:row
for j=1:col
if (i+j)>=(row+1)
sum = sum + A(i,j);
end
end
end
##### 2 comentariosMostrar NingunoOcultar Ninguno
Steven Lord el 13 de Dic. de 2016
There's no need for a test inside the loops.
In row 1, how many elements will be included in the sum and in which column are those elements located?
In row 2, how many elements will be included in the sum and in which column are those elements located?
Continue asking this question and see if there is a pattern to the answers that you can exploit in the definition of the second for loop to force only those elements that should be included in the sum to be included.
Image Analyst el 14 de Dic. de 2016
And of course, NEVER use "sum" as the name of your variable (as I mentioned in my answer) since that's the name of a very important built-in function that you won't be able to use anymore if you redefine "sum" to be your own personal variable.
And if you're puzzled by what Steve said, just see my answer.

MANAV MALHOTRA el 25 de Jun. de 2019
function summa=halfsum(m)
summa=0;
for i=1:size(m,1)
for j=1:size(m,2)
if(i<=j)
summa=summa+sum(m(i,j));
end
end
end
for those who are less familiar with matlab
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Roshan Singh el 15 de Sept. de 2019
function summa=halfsum(a)
[r,c]=size(a);
summa=0;
for x=1:r
for y=1:c
if (x==y)||(x<y)
summa=a(x,y)+summa;
end
end
end
fprintf('summation of right hand matrix is...%d\n',summa)
end
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Walter Roberson el 15 de Sept. de 2019
(x==y)||(x<y) is the same logical condition as x<=y but x<=y is more efficient.

Sebastián Añazco el 21 de Sept. de 2019
function summa = halfsum(A)
summa = 0;
for n = 1 : size (A,1)
for m = 1:size(A,2)
if n >m
a = 0;
else
a = A(n, m);
end
summa = summa +a;
end
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Shubham Pandey el 3 de Abr. de 2020
function sum = halfsum(a)
sum = 0;
[row,col] = size(a);
for i=1:row
for j=1:col
if i<=j
sum=sum+a(i,j);
end
end
end
end
##### 3 comentariosMostrar 1 comentario más antiguoOcultar 1 comentario más antiguo
Image Analyst el 3 de Abr. de 2020
But every MATLAB expert would advise anyone to never use the name of a built-in function like sum() as the name of a variable.
Shubham Pandey el 3 de Abr. de 2020
I agree with your feedback. Just a noobie mistake.

Nitin Kumar soni el 27 de Abr. de 2020
function summa=halfsum(n)
[row,col]=size(n);
summa=0;
for i=1:row
for j=1:col
if i<=j
summa=summa+n(i,j);
end
end
end
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Walter Roberson el 28 de Abr. de 2020
You can avoid the if statement if you have j end at i instead of continuing to col.

Ashay Nagdive el 1 de Mayo de 2020
function a = halfsum(A)
[row col]= size(A);
a = 0;
for r= 1: row
for c= 1: col
if c >= r
a= a + A(r,c)
else
A(r,c)= 0;
end
end
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

SANTOSH KAMBLE el 4 de Mayo de 2020
function summa=halfsum(x)
[row col]=size(x);
summa=0;
for r=1:row
for c=1:col
y=x(r,c);
if r<=c
summa=summa+y;
end
end
end
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

ADARSH VISAJI el 9 de Mayo de 2020
function summa = halfsum(A)
[row, col]=size(A);
sum=0;
for i=1:row
for j=i:col
if i<=j
sum= sum + A(i,j);
end
end
end
summa =sum;
end
if u guys have any dobts on matlab problem u can contact me through instagram
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Image Analyst el 9 de Mayo de 2020
This is similar to most of the other answers however you used the function name "sum" as a variable. It is not recommended to overwrite built-in functions with variables because then you can never use the built in function name anymore within that scope. For example if you wanted to do
theSum = sum(1:100);
you would not be able to because you made sum a scalar number -- it's not the built-in function anymore.

Taif Ahmed BIpul el 15 de Mayo de 2020
function summa=halfsum(A)
[m,n]=size(A);
summ=0;
for i=1:m
for ii=i:n
summ=summ+A(i,ii);
end
end
summa=summ;
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

vighnesh rana el 19 de Mayo de 2020
function summa = halfsum(A)
[row col] = size(A);
total = 0;
for r = 1:row
for c= r:col
total = total + A(r,c);
end
end
summa = total;
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Geetanjali Alle el 5 de Jun. de 2020
function summa = halfsum(M)
[row column]=size(M);
summa=0;
for i=1:row
for j=1:column
if i<j||i==j
summa=summa + sum(M(i,j));
end
end
end
Hope this helps!
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Walter Roberson el 8 de Jun. de 2020
i<j||i==j
would be more efficient as
i<=j
There is also an easy change to prevent you from needing the if at all.
sum(M(i,j))
M(i,j) is a scalar. sum() of a scalar is the same scalar. You do not need sum() there.

AYUSH MISHRA el 11 de Jun. de 2020
function summa=halfsum(A)
[m,n]=size(A);
summa=0;
for i =1:m
fprintf('active row :%d \n',i);
for j=1:n
fprintf('active collumn :%d \n',j);
if m<=n
summa=summa+A(i,j);
end
fprintf('summa aeter every loop complition : %d \n',summa);
end
end
run it and understand every step working in loop