Eliminarea duplicării de cod are efecte foarte bune asupra volumului de calcule, căci un rogram va arăta cu toeastă optimizare pe text sursă este efectuată îngrijit și complet. Totul se vede în cazul în care din start secvențele sunt scrise așa cum sunt descriși pașii algoritmului și programatorul vede că nu există dependențe între ele.
Secvența:
int n, i;
int a[100];
int b[100];
int c[100];
int d[100];
int sa=sb=sc=sd=0;
..............
for(i=0; i < n; i++) sa+=a[i];
for(i=0; i < n; i++) sb+=b[i];
for(i=0; i < n; i++) sc+=c[i];
for(i=0; i < n; i++) sd+=d[i];
.......................
conține de patru ori același număr de repetări executate independent pentru calculul celor patru sume, ceea ce aplicând o modalitate de a concentra toate calculele intermediare într-un bloc va duce la secvența:
int n, i;
int a[100];
int b[100];
int c[100];
int d[100];
int sa=sb=sc=sd=0;
..............
for(i=0; i < n; i++)
{
sa+=a[i];
sb+=b[i];
sc+=c[i];
sd+=d[i];
}
.......................
care este mult mai elegantă, iar din punct de vedere al volumului de calcule mult mai eficientă, căci lipsesc cele patru instrucțiuni for(), care sunt înlocuite de o singură astfel de instrucțiune.
În secvența:
int i, s=0;
................
s=0;
for(i=0; i < n; i++) sa+=a[i];
.............................
a doua inițializare cu zero a variabilei s nu se justifică dacă nu s-a mai lucrat cu aceasta până la electuarea acelei însumări repetitive.
Ori se va scrie secvența:
int i, s=0;
................
for(i=0; i < n; i++) sa+=a[i];
.............................
ori secvența de instrucțiuni:
int i, s;
................
s=0;
for(i=0; i < n; i++) sa+=a[i];
.............................
Eliminarea duplicării de cod vizează fie concentrări de secvențe, fie instrucțiuni puse în program neglijent care se văd de la o poștă că sunt în plus, pentru că fac același lucru de două sau mai multe ori.
În secvența:
int i, s=0;
................
s=0;
for(i=0; i < n; i++) sa+=a[i];
.............................
a doua inițializare cu zero a variabilei s nu se justifică dacă nu s-a mai lucrat cu aceasta până la electuarea acelei însumări repetitive.
Ori se va scrie secvența:
int i, s=0;
................
for(i=0; i < n; i++) sa+=a[i];
.............................
ori secvența de instrucțiuni:
int i, s;
................
s=0;
for(i=0; i < n; i++) sa+=a[i];
.............................
Eliminarea duplicării de cod vizează fie concentrări de secvențe, fie instrucțiuni puse în program neglijent care se văd de la o poștă că sunt în plus, pentru că fac același lucru de două sau mai multe ori.
[]
{ }
<
>
{ }
<
>
(04 decembrie 2017)
No comments:
Post a Comment