#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 128
void
probability_calc(int c[], double p[], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
sum += c[i];
for (i = 0; i < n; i++)
p[i] = (double) c[i] / sum;
}
double
entropy_calc(double p[], int n)
{
int i;
double entropy = 0;
for (i = 0; i < n; i++)
if (p[i])
entropy -= log(p[i]) / log(2) * p[i];
return entropy;
}
int
main(void)
{
int cnt[N] = {0};
char str[20], c;
double p[N] = {};
FILE *fp;
printf("ファイル名を入力してください:");
scanf("%s", str);
fp = fopen(str, "r");
if (!fp) {
printf("ファイルopenエラーです");
return -1;
}
while ((c = fgetc(fp)) != EOF)
if (c != '\n')
cnt[(int) c]++;
probability_calc(cnt, p, N);
printf("エントロピーH = %f\n", entropy_calc(p, N));
return (0);
}