Sunday, December 3, 2017

Eliminarea invarianților

Eliminarea invarianților se impune din cauză că apar în mod nejustificat în secvențe repetitive construcții care  de la o iterație la alta nu aduc nimic nou. Este vorba de instrucțiuni care se execută repetitiv, deși execuția lor o singură dată este suficientă.
În secvența:
sum=0;
sump=0;
sumc=0;
for(i=0; i <n ;  i++) {
                             sum+=x[i];
                             sump+= x[i] * x[i];
                             sump=0;
                             sumc+= x[i] * x[i] * x[i];
                             sumc=0;
                            }
După eliminarea invarianților secventa devine:
sum=0;
for(i=0; i <n ;  i++) {
                             sum+=x[i];
                             sump+= x[i] * x[i];
                             sumc+= x[i] * x[i] * x[i];
                             
                            }
Construcția:
for(i=0; i <n ;  i++) {
                             a=0:;
                             b=0;
                             c=0;
                             
                            }

devine:
a=0;
b=0;
c=0;
sau
a=b=c=0;
În programe sunt multe locuri unde apar invarianți. Programatorii trebuie să fie atenți că atunci când li se analizează programele de către alții este foarte greu să justifice de ce inițializează aiurea o variabilă simplă. Lucrurile sunt și mai rușinoase dacă acea variabilă intră într-o expresie care se execută repetat, anulând în acest fel sensul secvenței unde se implementează structura repetitivă.
Secvența:
for(i=0; i <n ;  i++) {
                             sum+=x[i];
                             sum0;                             
                            }
ori era scrisă pur și simplu:
sum=0; ori s-ar fi scris corect:
 sum0;  
for(i=0; i <n ;  i++) {
                             sum+=x[i];                                                       
                            }
Apar riscuri de a greși mai ales când programatorul nu definește variabile grupat, nu face inițializări grupar și nu scrie secvențe de prelucrare cât mai omogene. Eliminarea invarianților presupune introducerea de variabile simple care se inițializează fără rost în cadrul structurilor repetitive, lucru greu de argumentat de către programatorul care crede că are și el un oarece statut de meseriaș.

(03 decembrie 2017)

No comments:

Post a Comment