fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. #include<string.h>
  5.  
  6.  
  7. int main()
  8. {
  9. FILE *fptr, *encode, *fff, *decode, *fxxx, *ffff, *encoderead, *encode2;
  10. char FileName[100];
  11. int z = 0, number, number2 = 5, a, b = 0, c = 0, d = 0, zz = 8, i = 0, j = 0, k = 0, p = 0;
  12. double entropy = 0;
  13. char out[5][5] = { 0 }, other[5];
  14. fptr = fopen("111.txt", "r"); //輸入檔案
  15. fff = fopen("111.txt", "r"); //輸入檔案
  16. encode = fopen("encode.txt", "w");// 讀入檔案
  17.  
  18. decode = fopen("decode.txt", "w");// 讀入輸入檔案
  19.  
  20. float zzz[5] = { 0 }, pro[5] = { 0 }, fx[5] = { 0 }, ffx[5] = { 0 }, lenn = 0, len[4] = { 0 };
  21.  
  22. // 出現1-4數字個數
  23. while (z < 8)
  24. {
  25. fscanf(fptr, "%d", &number);
  26. zzz[number]++;
  27. printf("%d", number);
  28. z++;
  29. }
  30. for (a = 1; a <= 4; a++){
  31. printf("\n%.0f", zzz[a]);
  32. entropy += (zzz[a] / zz)*log2(zz / zzz[a]);//entropy
  33. }
  34. printf("\n");
  35. //1-4分別出現的機率
  36. for (a = 1, b = 1; a, b <= 4; a++, b++){
  37.  
  38. pro[b] += (zzz[a] / zz);
  39.  
  40. printf("pro=%.5f\n", pro[b]);
  41. }
  42. printf("\n");
  43. //累加值F(X)
  44. for (b = 1, c = 1; c <= 4, b <= 4; b++, c++){
  45.  
  46. fx[c] += fx[c - 1] + pro[b];
  47.  
  48. printf("F(X)=%.5f\n", fx[c]);
  49. }
  50. printf("\n");
  51.  
  52. //出現FX(bar)
  53. for (b = 1, c = 0, d = 1; b <= 4, c <= 3, d <= 4; b++, c++, d++){
  54.  
  55. ffx[d] = 0.5*pro[b] + fx[c];
  56. printf("FFX=%.5f+%.5f", pro[b], fx[c]);
  57. printf("=%.5f\n", ffx[d]);
  58.  
  59. }
  60. //codeword 長度
  61. for (i = 0; i <= 3; i++){
  62. len[i] = ceil(log2(1 / pro[i + 1]) + 1);
  63. printf("%f\n", len[i]);
  64. }
  65. //Codeword
  66. for (d = 1; d <= 4; d++){
  67. for (i = 0; i < len[d - 1]; i++){
  68. ffx[d] = ffx[d] * 2;
  69. if (ffx[d] >= 1){
  70. out[d][i] = '1';
  71. ffx[d] = ffx[d] - 1;
  72. }
  73. else{
  74. out[d][i] = '0';
  75. }
  76. }
  77. printf("%s\n", out[d]);
  78. printf("\n");
  79. }
  80. //average length
  81. for (d = 1; d <= 4; d++)
  82. {
  83. lenn += len[d - 1] * pro[d];
  84. }
  85. while (j < zz)
  86. {
  87. fscanf(fff, "%d", &number);
  88. fprintf(encode, "%s", out[number]);
  89. j++;
  90. }
  91.  
  92. fclose(fptr);
  93. fclose(fff);
  94. fclose(encode);
  95. int num,oo,pp,num2;
  96. int ok[4][4] = {0};
  97. //解碼
  98. encode = fopen("encode.txt", "r");//
  99. encode2 = fopen("encode.txt", "r");//
  100. while (k < (float)zz*2.75){
  101.  
  102. fscanf(encode, "%1d", &num);
  103.  
  104.  
  105. k++;
  106. }
  107. //fprintf(decode,"%d\n",number2)
  108.  
  109.  
  110. printf("entropy=%f\n", entropy);
  111. printf("length=%f\n", lenn);
  112.  
  113.  
  114. system("pause");
  115. return 0;
  116.  
  117. }
Runtime error #stdin #stdout 0s 2240KB
stdin
Standard input is empty
stdout
Standard output is empty