This C code assigns codes to a maximum of 10 chars source codeThis snippet submitted by Abhishek H.Dwivedi on 2005-02-17. It has been viewed 12110 times.Rating of 4.6 with 74 votes #include<stdio.h> #include<conio.h> #include<math.h> int temp,i,j,col=0,n=100,count=0,b[10][2]; float a[10],sum=100; char c[10][10]; void main() { void part(int,int); clrscr(); printf("Enter number of characters "); while(n>10) { printf("(Not more than 10) "); scanf("%d",&n); } while(sum>1) { printf("Enter their probabilities of occurences\n"); sum=0; for(i=1;i<=n;i++) { printf("."); scanf("%f",&a[i]); while(a[i]>=1) a[i]=a[i]/10; sum=sum+a[i]; if(sum>1) break; } if(sum>1) printf("Sum of probabilities must be less than or equal to 1 !\n"); } for(i=0;i<10;i++) { for(j=0;j<10;j++) c[i][j]='*'; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(a[j]<a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }}} printf("\n\n"); part(1,n); printf("The codes are \n"); for(i=0;i<n;i++) { for(j=0;j<10;j++) printf("%c ",c[i][j]); printf("\n"); } getch(); } void part(int low,int high) { int min=100,k,z,sum=0,dif,sum1=0,l=0; z=(high-low); z=abs(z); for(j=0;j<10;j++) for(i=0;i<2;i++) b[j][i]=0; if(z>1) { count++; for(i=low-1;i<high;i++) sum=sum+a[i]; sum1=a[low-1]; sum=sum-a[low-1]; for(i=low;i<=high;i++) { dif=sum-sum1; sum1=a[i]+sum1; sum=sum-a[i]; b[l][0]=abs(dif); b[l][1]=i; l++; } for(i=0;i<l;i++) if(min>b[i][0]) { min=b[i][0]; k=b[i][1]; } for(i=low-1;i<k;i++) c[i][col]='0'; for(i=k;i<high;i++) c[i][col]='1'; col++; part(low,k); part(k+1,high); } else { c[low][col]='1'; c[high][col]='0'; if(c[high+1][col]=='*'&&high<=9) while(c[high+1][col]=='*') col--; col++; } } More C and C++ source code snippets |