Page 1 of 1

LOOP

Posted: Thu Nov 23, 2017 8:08 am
by Rofice
Set i /0*100/ ;

parameter a(i)
;

a('0') = 0 ;
loop(i, a(i+1) = a(i)+1 ;
)
;
Display a;
How I can transform the above loop, so that iteration stop when a(i+1) = 20
I used the following
loop(i$(a(i) lt 20), a(i+1) = (a(i)+1)$(a(i) lt 20) ;
but when value reaches to 20, iteration keep going.

Best Regards

Re: LOOP

Posted: Fri Nov 24, 2017 4:39 am
by Gideon Kruseman
When you reach 20 the calculation is not executed so a(i+1) is equal to zero. which means it is below 20 and the process starts over again. so you will need to build in a switch that tells you, you have reached your threshold level. Something along these lines will work.
Cheers, Gideon

Set i /0*100/ ;

parameter a(i)
;
scalar init;init=0;
a('0') = 0 ;
loop(i${(a(i) lt 20) and (init ne 1)},
a(i+1) = a(i)+1;
init${a(i+1) eq 20}=1;
) ;

Display a;

Re: LOOP

Posted: Fri Nov 24, 2017 7:27 am
by Rofice
Thank you Sir, It works :)
Can you recommend any book with case studies or examples for loop functions?
Gideon Kruseman wrote: 6 years ago When you reach 20 the calculation is not executed so a(i+1) is equal to zero. which means it is below 20 and the process starts over again. so you will need to build in a switch that tells you, you have reached your threshold level. Something along these lines will work.
Cheers, Gideon

Set i /0*100/ ;

parameter a(i)
;
scalar init;init=0;
a('0') = 0 ;
loop(i${(a(i) lt 20) and (init ne 1)},
a(i+1) = a(i)+1;
init${a(i+1) eq 20}=1;
) ;

Display a;