# Write a function called one_per_n that returns the smallest positive integer n for which the sum 1 + 1/2 + 1/3 + … + 1/n , is greater than or equal to x where x is the input argument. Limit the maximum number n of terms in the sum to 10,000 .

19 views (last 30 days)

Show older comments

prasanta sahoo
on 22 May 2015

Answered: Jorge Briceño
on 29 Jan 2018

function out=one_per_n(x)

if x>10000

out=-1;

%fprintf('-1\n');

else

total=0;

for n=1:x;

total=(total+(1/n));

end

if total>=x

out=total;

%fprintf('%d\n',total);

end

end

##### 1 Comment

Adam
on 22 May 2015

### Accepted Answer

Walter Roberson
on 22 May 2015

Example:

for K = 1 : 50 %maximum 50 times

t = f(K); %some calculation dependent on the counter

if t >= SomeLimit %did we reach the limit?

break; %Yes! Stop this loop!

end

end

%now that we got here you need to figure out if you matched what you wanted to match, or if you ran out of iterations

%left as an exercise for the reader

##### 4 Comments

Walter Roberson
on 1 Jun 2015

### More Answers (4)

Chen Li
on 17 Mar 2017

Edited: Chen Li
on 17 Mar 2017

function d = holiday(month,day)

if month == 1 && day == 1

d = true;

elseif month == 7 && day == 4

d = true;

elseif month == 12 && day == 25

d = true;

elseif month == 12 && day == 31

d = true;

else

d = false;

end

This is the code that is based on what you wrote. Now it works!

##### 1 Comment

Walter Roberson
on 18 Mar 2017

Jean Araujo
on 1 Jun 2015

function out = one_per_n(x)

total=0;

n = 1;

while total < x

total = (total+1/n);

n = n+1;

end

if n-1 > 10000

out = -1;

else

out = (n-1);

end

##### 2 Comments

Walter Roberson
on 2 Jun 2015

Returning -1 was definitely not in the problem statement from the title of this Question!

Nava Subedi
on 28 Nov 2016

Edited: Walter Roberson
on 28 Nov 2016

I tried to solve the question.

Write a function called holiday that takes two input arguments called month and day; both are scalar integers representing a month (1-12) and a day (1-31). The function returns a logical true if the specified date is a holiday; if not, it returns false. For the purposes of this exercise, the following dates are considered holidays: January 1st, July 4th, December 25th, and December 31st.

I wrote:

function d = holiday(month, day)

if (month >= 1 && month <=12) && (day >= 1 && day <= 31)

if month == 1 && day == 1

d = 1

fprintf('%d is true! It is a holoday. \n', d);

end

if month == 7 && day == 4

d = 1

fprintf('%d is true! It is a holoday. \n', d);

end

if month == 12 && day == 25

d = 1

fprintf('%d is true! It is a holoday. \n', d);

end

if month == 12 && day == 31

d = 1

fprintf('%d is true! It is a holoday. \n', d);

end

else

d = 0

fprintf('%d is false! It is not a holoday. \n', d);

return

end

end

But did not work. Where did I do mistake??

##### 1 Comment

Walter Roberson
on 28 Nov 2016

The assignment does not request any printing.

The assignment requires logical true and logical false as outputs, not double precision 1 and double precision 0. Logical true is represented as true and logical false is represented as false

Jorge Briceño
on 29 Jan 2018

Hello Nava,

Maybe you could also try to simplify your code. Here is my example:

function out = holiday (m, d)

if (m==1 && d==1) || (m==7 && d==4)|| (m==12 && d==25)...

|| (m==12 && d==31)

out=true;

else

out=false;

end

return;

end

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!