power program from the book "c program. lang." version2, cycle -


i stuck line of code "c programming language" book - "for (p = 1; n > 0; --n)" - counter runs 1 more 1, while step -1. counter? n itself?

(i used see for (i = 1; <= n; ++i)-like structures, issue of counter clear, in version 2 encountered don't know , counter is...

from here:

/* power:  raise base n-th power; n >= 0; version 2 */    int power(int base, int n)    {        int p;        (p = 1; n > 0; --n)            p = p * base;         return p;     } 

in each iteration n decrements 1 because of --n, when n decrease 0 condition n > 0 becomes false , loop breaks.

for (p = 1; n > 0; --n)               ^               |  when n = 0, condition becomes 0 > 0 false 

in loop multiply p = p * base; evaluates => base * base * base * ...n times => basen.

p is store result @ end p = basen.

you may write (a small code, think bit fast too):

int p; (p = 1; n--  && (p*=base) ;) return p;    

edit: comments & answers:

for (p = 1; n > 0; --n) - when counter starts?

yes n counter, in loop don't need initialized n. initializes p variable 1 store result. value of n comes function argument. call int power(int base, int n); function in main, like:

result = power(3,2);  // here base = 3, , n = 2 

or

result = power(5,7); // here base = 5, , n = 7 

from n p (to 1)?

loop runs n 1 times (not condition > 0) e.g
in first example when call power(3,2);, loop runs n = 2 1. likewise in second call of function power(5,7); loop runs n = 7 1.

why need p here?

as have written above in answer p need store result. e.g.

in loop p 1, in each iteration multiply p base value , store result p only. e.g.
function call power(3,2); loop runs , p calculate like:

base = 3 , n = 2 p = 1; // initialize

first iteration:

condition n > 0 true because n 2 (2 > 0).  p = p * base = 1 * 3 = 3 , p becomes 3.  --n decreases n 1 

second iteration:

condition n > 0 true because n 1 (1 > 0).  p = p * base = 3 * 3 = 9 , p becomes 9.  --n decreases n 0 

third iteration:

condition n > 0 false because n 0 (0 > 0).   condition false loop breaks   

return p 32 = 9.


Comments

Popular posts from this blog

How to mention the localhost in android -

php - Calling a template part from a post -

c# - String.format() DateTime With Arabic culture -