I would seem to make sense to me to reorganize your segment orders to something like:
/*
a = Top Horizontal
b = Top-Right
c = Bottom-Right
d = Bottom Horizontal
e = Bottom-Left
f = Top-Left
g = Middle Horizontal
dp = Decimal Point
*/
#define SEGMENTOFFSET 10 // The lowest pin reference for a display segment
int digitalDisplay[] = {10, 11, 12, 13, 14, 15, 16, 17};
int cathode[] = { 0, 1, 2, 3 };
which would allow you to do something like:
void setup()
{
int i;
for (j = 0; j < sizeof(cathode) / sizeof(cathode[0]); j++) {
// whatever you want to do with each segment...
for (i = 0, j = 0; i < sizeof(digitalDisplay) / sizeof(digitalDisplay[0]); i++) {
pintMode(i + SEGMENTOFFSET, OUTPUT)
digitalWrite(i + SEGMENTOFFSET, LOW);
}
}
}
This would require you to reorder your arrays, but I think you get the idea.