Perchè

sup=0;
... sup deve essere 15 inizialmente

Era questa

i=dim/2;
l'operazione nello pseudocodice ? Non mi pare ...

if(n>a[i])
inf=i+1;
else if (n<a[i])
sup=i-1;
qui mi sembra ci fosse un else ...