#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
typedef struct freqm {
int dfreq[100];
char word[10];
} freqm;
freqm fm[10];
int mat[10][10];
float sim[10][10];
int dsize[20];
int search(freqm fm[10], int t_cnt, char term[10]);
void print_cnt(freqm fm[10], int d_cnt, int t_cnt);
int read_files(int d_cnt);
void build_sim(int d_cnt, int t_cnt);
void print(int d_cnt);
void main() {
int d_cnt, c_cnt, t_cnt;
clrscr();
printf("\n\tenter no of documents");
scanf("%d", &d_cnt);
t_cnt = read_files(d_cnt);
print_cnt(fm, d_cnt, t_cnt);
build_sim(d_cnt, t_cnt);
print(d_cnt);
getch();
}
int read_files(int d_cnt) {
int flag = 0, i, j, t_cnt = 0, count;
char str[10], str1[10], input[10], term[10];
FILE *fp;
printf("\nenter ip prefix");
scanf("%s", input);
for (i = 1; i <= d_cnt; i++) {
strcpy(str1, input);
sprintf(str, "%d", i);
strcat(str1, str);
strcat(str1, ".txt");
fp = fopen(str1, "r");
while (fscanf(fp, "%s %d", term, &count) != EOF) {
flag = 0;
//fflush(stdin);
dsize[i] = dsize[i] + count;
if (i > 1)
flag = search(fm, t_cnt, term);
if (i == 1 || flag == -1) {
fm[t_cnt].dfreq[i] = count;
strcpy(fm[t_cnt].word, term);
t_cnt++;
} else
fm[flag].dfreq[i] = count;
}
}
return t_cnt;
}
void print_cnt(freqm fm[10], int d_cnt, int t_cnt) {
int i, j;
for (i = 0; i < t_cnt; i++) {
printf("\n%s", fm[i].word);
for (j = 1; j <= d_cnt; j++)
printf("\t%d", fm[i].dfreq[j]);
}
}
int search(freqm fm[10], int t_cnt, char term[10]) {
int i;
for (i = 0; i < t_cnt; i++)
if (strcmp(fm[i].word, term) == 0)
return i;
return -1;
}
void build_sim(int d_cnt, int t_cnt) {
int i, j, sum = 0, k;
float res = 0, res1, temp, temp1;
for (i = 1; i <= d_cnt; i++) {
temp = dsize[i];
for (j = i + 1; j <= d_cnt; j++) {
sum = 0;
temp1 = dsize[j];
for (k = 0; k < t_cnt; k++)
sum = sum + min(fm[k].dfreq[i], fm[k].dfreq[j]);
printf("sum=== %d", sum);
printf("t1 %d %d", temp, temp1);
//res1=(float)(sqrt(temp)*sqrt(temp1));
printf("\n%f", res1);
res = sum / sqrt(temp1) * sqrt(temp);
sim[i][j] = res;
}
}
}
void print(int d_cnt) {
int i, j;
for (i = 1; i <= d_cnt; i++) {
printf("\n");
for (j = 1; j <= d_cnt; j++)
printf("\t%f", sim[i][j]);
}
}
//input1.txt
T1 0
T2 3
T3 5
T4 1
//input2.txt
T1 5
T2 0
T3 0
T4 1
我正在为单通道聚类算法编写代码。但在功能build_sim
即使temp
和temp1
的值为正,即9和6,我也会收到domain_error。如何解决此问题?
我正在使用turboc。这是与turbo c相关的问题吗?
答案 0 :(得分:1)
主要问题:
1)格式说明符错误
float res = 0, res1, temp, temp1;
...
// printf("t1 %d %d", temp, temp1);
printf("t1 %f %f", temp, temp1);
2)#include <math.h>
缺少sqrt()
。这可能解释了问题,因为没有原型,sqrt
假设返回int
。这会导致未定义的行为。
小问题的数量:
3)差main()
声明
// void main()
int main(void)
4)c_cnt
从未使用过。 j
中从未使用过read_files()
5)还不确定您的包含文件是否包含min()
。仔细检查一下。