/* ПРОГРАММА ПОСТРОЕНИЯ ГЛАВНОГО ПРЕДЛОЖНОГО СПЕКТРА */ #include #define MAX 5000 /* максимальное число словоформ */ #define K 1.27 /* коэффициент для графика */ #define P 100. /* проценты */ /* BORLAND TURBO C V2.0 */ main() { while (MAX) { /* зацикливание */ FILE *in; /* указатель на файл ввода */ int ch; /* текущий символ */ unsigned long simb = 0L; /* общее число символов */ unsigned nc = 0; /* число символов в словоформе */ unsigned nw = 0; /* число словоформ в тексте */ unsigned word = 0, b = 0, n = 0, s = 0; char name[12]; /* имя файла с расширением */ /* ввод файла из текущего каталога */ printf("Введите имя текстового файла: "); scanf("%s", name); if ((in = fopen(name,"r")) == NULL) { printf("Невозможно открыть файл: %.12s\n\n", name); exit(1); /* выход из программы */ } /* ввод очередного символа из файла */ while(nw 64 && ch <91) || (ch >96 && ch <123) || (ch >126 && ch <242)) && word == 0) { word = 1; /* начало новой словоформы */ nc = 0; nw++; /* подсчет словоформ */ if (ch == 162 || ch == 130) word = 2; /* "в" */ if (ch == 225 || ch == 145) word = 3; /* "с" */ if (ch == 173 || ch == 141) { /* "на" */ if ((ch = getc(in)) == 160) word = 4; if (ch == EOF) word = 5; } } if (ch == 45 && word) { /* учет переносов */ while ((ch = getc(in)) == '\n' || ch == '\r' || ch == ' ' || ch == '\t'); if (ch == EOF) word = 5; } if ((ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t') && word) { if (nc == 1 && word == 2) b++; if (nc == 1 && word == 3) s++; if (nc == 1 && word == 4) n++; word = 0; /* окончание словоформы */ } } /* вывод результатов */ printf("Проанализировано %lu символов.\n", simb); printf("В %u словоформах содержится предлогов:\n", nw); printf("\"в\" - %u, \"на\" - %u, \"с\" - %u\n", b, n, s); /* нахождение максимума и нормирование */ if (b>=n && b>=s && b) { n *=P/b; s *=P/b; b=P; } if (n>=b && n>=s && n) { b *=P/n; s *=P/n; n=P; } if (s>=b && s>=n && s) { b *=P/s; n *=P/s; s=P; } puts("Главный предложный спектр:"); printf("\"в\" = %u%%, \"нa\" = %u%%,", b, n); printf(" \"с\" = %u%%\n", s); /* построение условного графика */ for(b /=K; b > 0; b-) putchar('в'); putchar('\n'); for(n /=K; n > 0; n-) putchar('н'); putchar('\n'); for(s /=K; s > 0; s-) putchar('с'); puts('\n'); fclose(in); /* закрытие файла */ } }