[Scilab-users] Avoiding a loop

Samuel Gougeon sgougeon at free.fr
Wed May 10 23:30:24 CEST 2017


Le 10/05/2017 à 17:25, Frieder Nikolaisen a écrit :
>
> There was a piece of code missing:
>
> P  =  [
> 1,       0;  
> 2,       50;  
> 5,       110;
> 10,      80;
> 11,      200
> 15,      0];
>
> batt  =  1000;
> gen  =  0;
>
> n  =  1
> for  n=1:5
>
>      if  P(n,2)  >  100  then
>          if  batt  >  800  then  batt  =  batt  -  P(n,2)  *  (P(n+1,1)  -  P(n,1))
>          else
>          gen  =  gen  +  P(n,2)  *  (P(n+1,1)  -  P(n,1))
>          end
>      
>      else
>      batt  =  batt  -  P(n,2)  *  (P(n+1,1)  -  P(n,1))
>      end
> disp('n '  +  string(n))
> disp('batt '  +  string(batt))
> disp('gen '  +  string(gen))
> end
>
> Am 2017-05-10 17:23, schrieb Frieder Nikolaisen:
>
>> Hello,
>>
>> I did write an example code, but I do not like the time consuming way 
>> I solved the problem. With 50 000 lines in the matrix, it wouldn't be 
>> fun.
>>
>> How can I avoid using the for-loop?
>>
>> 10,      80;
>> 11,      200
>> 15,      0];
>>
>> batt  =  1000;
>> gen  =  0;
>>
>> n  =  1
>> for  n=1:5
>>
>>      if  P(n,2)  >  100  then
>>          if  batt  >  800  then  batt  =  batt  -  P(n,2)  *  (P(n+1,1)  -  P(n,1))
>>          else
>>          gen  =  gen  +  P(n,2)  *  (P(n+1,1)  -  P(n,1))
>>          end
>>      
>>      else
>>      batt  =  batt  -  P(n,2)  *  (P(n+1,1)  -  P(n,1))
>>      end
>> disp('n '  +  string(n))
>> disp('batt '  +  string(batt))
>> disp('gen '  +  string(gen))
>> end

It may be compacted with:

P  =  [    1.    2.       5.       10.     11.     15.
         0.    50.   110.    80.    200.    0.  ]';
batt  =  1000;
gen  =  0;
terms  =  P(1:$-1,2)  .*  (P(2:$,1)  -  P(1:$-1,1));
for  n = 1:5
     if  P(n,2)  <=  100  |  batt   >  800  then
         batt  =  batt  -  terms(n);
     else
         gen  =  gen  +  terms(n);
     end mprintf("n = %d batt = %d gen = %d\n", n, batt, gen);
end

Then, as told by Tim, since the condition on batt may change batt 
according to n,
it is hard to go on without the loop.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20170510/259bab9a/attachment.htm>


More information about the users mailing list