/* Driver program to check above functions */ int main() { { int arr[] = {1, 1, 1, 0, 0, 0, 0, 0}; int n = sizeof(arr)/sizeof(arr[0]); printf("Count of zeroes is %d \n", countZeros(arr, n)); } { int arr[] = {1, 0, 0, 0, 0}; int n = sizeof(arr)/sizeof(arr[0]); printf("Count of zeroes is %d \n", countZeros(arr, n)); } { int arr[] = {0, 0, 0}; int n = sizeof(arr)/sizeof(arr[0]); printf("Count of zeroes is %d \n", countZeros(arr, n)); } { int arr[] = {1, 1, 1, 1}; int n = sizeof(arr)/sizeof(arr[0]); printf("Count of zeroes is %d \n", countZeros(arr, n)); } return 0; }
// BANDPASS pzkContainer * t2bp(pzkContainer * pzk, real w0, real dw) { uint nop, noz, i; pzkContainer * f; const real dwp2 = dw / 2; const real w02 = w0*w0; complex tmp, beta, gamma, cw0; cw0.re = w0; cw0.im = 0; noz = 2*pzk->nextZero; nop = 2*pzk->nextPole; if( pzk->no_wz > 0 ) { noz += pzk->no_wz; } if( pzk->no_wz < 0 ) { nop -= pzk->no_wz; } f = createPzkContainer(nop, noz); f->no_wz = -pzk->no_wz; f->amp = pzk->amp * pow(dw, (real)(f->no_wz)+(real)countPoles(pzk)-(real)countZeros(pzk)); gamma.re = 0; gamma.im = w0; if( pzk->no_wz > 0 ) { for( i = 0; i < pzk->no_wz; i++ ) { addZero(f, gamma); } } if( pzk->no_wz < 0 ) { for( i = 0; i < -pzk->no_wz; i++ ) { addPole(f, gamma); } } for( i = 0; i < pzk->nextPole; i++ ) { if( cisreal(pzk->poles[i]) ) { beta.re = dwp2 * pzk->poles[i].re; tmp.re = 1 - ( w02/(beta.re*beta.re) ); if( tmp.re >= 0 ) { tmp.re = sqrt( tmp.re ); gamma.im = 0; gamma.re = beta.re * (1 + tmp.re); addPole(f, gamma); gamma.re = beta.re * (1 - tmp.re); addPole(f, gamma); } else { tmp.im = sqrt( -tmp.re ); tmp.re = 1; gamma = cmul2( beta.re, tmp ); addPole(f, gamma); } f->no_wz++; } else { beta = cmul2(dwp2, pzk->poles[i]); tmp = cdiv(cw0, beta); tmp = csqrt( csub2(1, cmlt(tmp, tmp)) ); gamma = cmlt(beta, cadd2(1, tmp)); addPole(f, gamma); gamma = cmlt(beta, csub2(1, tmp)); addPole(f, gamma); f->no_wz += 2; } } for( i = 0; i < pzk->nextZero; i++ ) { if( cisreal(pzk->zeros[i]) ) { beta.re = dwp2 * pzk->zeros[i].re; tmp.re = 1 - ( w02/(beta.re*beta.re) ); if( tmp.re >= 0 ) { tmp.re = sqrt( tmp.re ); gamma.im = 0; gamma.re = beta.re * (1 + tmp.re); addZero(f, gamma); gamma.re = beta.re * (1 - tmp.re); addZero(f, gamma); } else { tmp.im = sqrt( -tmp.re ); tmp.re = 1; gamma = cmul2( beta.re, tmp ); addZero(f, gamma); } f->no_wz--; } else { beta = cmul2(dwp2, pzk->zeros[i]); tmp = cdiv(cw0, beta); tmp = csqrt( csub2(1, cmlt(tmp, tmp)) ); gamma = cmlt(beta, cadd2(1, tmp)); addZero(f, gamma); gamma = cmlt(beta, csub2(1, tmp)); addZero(f, gamma); f->no_wz -= 2; } } //shrink return f; }