Создание приложения "Подсчет частоты введенных слов в текстовом файле"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
? считанных слов
d=0; - счётчик количества слов
if (strcmp(words[j],prov)==0) {continue;} - условие проверяет соответствует ли слово из массива строк words[j] заранее заданной строке prov. Если данное условие выполняется, то цикл пропускает текущую итерации.
else { - если условие не выполняется, то следует выполнение данного оператора
strcpy(vyvod,words[j]); - в строку vyvod копируется строка words[j]. Далее эта строка будет сравнивать со строками из массива строк words и заносится в структуру CNT V как уникальная. Все повторные совпадения данного слова будут заменяться на значение строки prov ::null::. Напоминаю, что предыдущий цикл прерывает итерацию при встрече данного значения, что позволяет избежать подсчёта лишнего слова.
for(s=0;s!=*i;s++) { - цикл сравнения массива строк с заданной строкой vyvod
if (strcmp(vyvod,words[s])==0) {d++; strcpy(words[s],prov);}} - если слово встреченное в массиве строк words равно заданному слову, то происходит его затирание словом prov и инкрементирование счётчика
strcpy(V[q].word,vyvod); V[q].num=d; q++;}} - копирование заданного слова и количество его повторений в структуру STR V("\a\a\a"); - 3 звуковых сигнала по окончанию обработки
return q; - возвращение функцией значения q с типом int
}
void Delete(int*i) - прототип функции удаления из слов знаков препинания с параметром-указателем на переменную типа int
{
char spr[]="!:,.?;"; - объявление строковой переменной
int k,r,j,d; - объявление переменной с типом int
for(d=0;d!=*i;d++) { - цикл удаления знаков препинания из слов, проходит по всему массиву строк words
for(k=0;spr[k]!=\0;k++) { - цикл чтения знаков из заданной строки, работает до тех пор, пока не достигнет нуль-терминатора
for(r=j=0;words[d][r]!=\0;r++) - цикл сравнения символов из массива строк words со строкой spr
if (words[d][r]!=spr[k]) - условие проверяет совпадает ли данный символ с символом из строки spr, после чего сдвигает символы строки. На место совпавшего символа ставится нуль-терминатор
{words[d][j++]=words[d][r];}
words[d][j]=\0;}
}
}
void Output(CNT*V,int*i,int q) - прототип функции вывода результатов работы программы на экран с параметрами-указателями на структуру и переменными типа int
{
int j; - объявление переменной типа int
if (t!=1) { - проверка на заполнение массива строк
printf("Snachala nyjno prochitat fail\n");("Press any key to escape for menu");}{ - если условие не выполнено, то действует данный оператор
clrscr(); - очистка экрана
for(j=0;j!=q;j++) { - цикл вывода слов из структуры
printf("slovo %s - kol-vo: %d\n",V[j].word,V[j].num);}("Vsego slov - %d",*i);} - вывод количества всех слов
getch(); - ожидание нажатия клавиши
}
void Write(CNT*V,int*i,int q) - прототип функции записи в файл результатов работы программы с параметрами-указателями на структуру и переменными типа int
{
int j; - объявление переменной с типом int
char name[50]; - объявление строковой переменной
FILE *book; - объявление указателя на файл
clrscr(); - очистка экрана
if (t!=1) { - проверка условия на заполнения массива строк
printf("Snachala nyjno prochitat fail\n");("Press any key to escape for menu");}{("Vvedite nazvanie faila i put k nemy\n"); - вывод сообщения о вводе пути и названия файла("%s",&name); - ввод пути и названия файла
book=fopen(name,"wt"); - открытие файла в режиме записи
for(j=0;j!=q;j++) { - цикл записи результатов работы программы
fprintf(book,"slovo %s - kol-vo: %d\n",V[j].word,V[j].num);} - запись в файл(book,"Vsego slov - %d",*i); - запись общего количества слов в файл
fclose(book);} - закрытие файла
getch(); - ожидание нажатия клавиши
}
int main() - объявление главной функции
{
int w; - объявление переменной типа int
setlocale(LC_ALL,"Russian"); - подключение кириллицы в консоли
while(1){ - цикл с рекурсией
clrscr(); - очистка экрана
printf("=============================\n"); - вывод сообщения
printf(" Kursovoi proekt\n");
printf("Vypolnil student gryppy 12-94\n");(" Romanov A.S.\n");("=============================\n");
printf(" M E N U\n"); - вывод меню
printf("1:Read from file\n");("2:Rezult\n");("3:Write in file\n");("4:Exit\n");("%d",&w); - ввод значения w(w) { - оператор выбора1: Read(&e); Delete(&e); g=Scan(V,&e); break; - выполнение функций2: Output(V,&e,g); break;3: Write(V,&e,g); break;
case 4: exit(0);} - выход из программы
}
}
В программном коде использовано 6 функций(чтение из файла, обработка данных, занесение данных в структуру, вывод результата на экран, вывод результата в файл, меню в главной функции). Для работы программы необходим как минимум один файл - необходимо считать данные. Также есть возможно вывести результаты работы программы в тот же файл.
Для проверки разработанного приложения проведём тестирование её работы.
Все тесты были проведены на базе группы пользователей.
Тест №1
Проверка работы функции удаления знаков препинания из слов.
В качестве тестового текста возьмём следующие предложения(Рис №11):
Рис №11. Тест №1.
Исходя из заданного текста, можно предположить, что ожидаемым результатом работы программы будет вывод 3-х уникальных слов.
Проверка(Рис №12):
Рис №12. Тест №1.Проверка удаления знаков препинания
Как видно из скриншота консоли, программа полностью справилась с первым тестом.
Тест №2.
Проверка работы счётчика общего вхождения слов.
В качестве текста возьмём часть введения. Узнаем количество слов фрагмента при помощи Microsoft Word(Рис №13):
Рис №13. Тест №2. Подсчёт слов при помощи Microsoft Word 2010
Тест №2Поместим данный фрагмент в текстовый файл и сравним с результатом работы приложения(Рис №14):
Рис №14. Тест №2.Проверка подсчёта общего количества слов
Результаты показывают, что программа справилась со вт?/p>