Smaller and more effective code

Hi could this code block be done in a smaller and more effective way.
It feels to be to much code.

if(diam<=3 && diam >=0.50)
{if (tk=="f")tolklass =0.05;
if (tk=="m")tolklass =0.10;
if (tk=="c")tolklass =0.15;
if (tk=="v")tolklass =0.00;
}
else if(diam<=6 && diam >=3)
{if (tk=="f")tolklass =0.05;
if (tk=="m")tolklass =0.10;
if (tk=="c")tolklass =0.20;
if (tk=="v")tolklass =0.50;
}
else if(diam<=30 && diam >=6)
{if (tk=="f")tolklass =0.10;
if (tk=="m")tolklass =0.20;
if (tk=="c")tolklass =0.50;
if (tk=="v")tolklass =1.00;
}
else if(diam<=120 && diam >=30)
{if (tk=="f")tolklass =0.15;
if (tk=="m")tolklass =0.30;
if (tk=="c")tolklass =0.80;
if (tk=="v")tolklass =1.50;
}
else if(diam<=400 && diam >=120)
{if (tk=="f")tolklass =0.20;
if (tk=="m")tolklass =0.50;
if (tk=="c")tolklass =1.20;
if (tk=="v")tolklass =2.50;
}
else if(diam<=1000 && diam >=400)
{if (tk=="f")tolklass =0.30;
if (tk=="m")tolklass =0.80;
if (tk=="c")tolklass =2.00;
if (tk=="v")tolklass =4.00;
}
else if(diam<=2000 && diam >=1000)
{if (tk=="f")tolklass =0.50;
if (tk=="m")tolklass =1.20;
if (tk=="c")tolklass =3.00;
if (tk=="v")tolklass =6.00;
}
else if(diam<=4000 && diam >=2000)
{if (tk=="f")tolklass =0.00;
if (tk=="m")tolklass =2.00;
if (tk=="c")tolklass =4.00;
if (tk=="v")tolklass =8.00;
}
It might help if you explained what it is this code is supposed to do...
Use switch.
in your case...i think it would be....
1
2
3
4
5
6
7
8
9
10
11
12
13
if(diam<=3 && diam >=0.50)
{
switch(tk)
{
case 'f':tolklass =0.05
break;
.
.
.
case 'v':tolklass =0.00;
break;
}
}
Last edited on
Use lookup tables:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
double lut[][4] = {

/*  f,   m,   c,   v  */
{0.05,0.10,0.15,0.00},  // 0.5 - 3
{0.05,0.10,0.20,0.50},  // 3 - 6
{0.10,0.20,0.50,1.00},  // 6 - 30
{0.15,0.30,0.80,1.50},  // 30 - 120
{0.20,0.50,1.20,2.50},  // 120 - 400
{0.30,0.80,2.00,4.00},  // 400 - 1000
{0.50,1.20,3.00,6.00},  // 1000 - 2000
{0.00,2.00,4.00,8.00}   // 2000 - 4000

};

int tki = -1;
switch(tk[0])  // if a string, or just tk if it's a char
{
  case 'f': tki = 0; break;
  case 'm': tki = 1; break;
  case 'c': tki = 2; break;
  case 'v': tki = 3; break;
}

int diami = -1;
     if(diam <  0.5)  ;           // do nothing
else if(diam <= 3)    diami = 0;
else if(diam <= 6)    diami = 1;
else if(diam <= 30)   diami = 2;
else if(diam <= 120)  diami = 3;
else if(diam <= 400)  diami = 4;
else if(diam <= 1000) diami = 5;
else if(diam <= 2000) diami = 6;
else if(diam <= 4000) diami = 7;


if(tki >= 0 && diami >= 0)
    tolkass = lut[diami][tki];
Last edited on
Topic archived. No new replies allowed.