Провести частотный анализ текста, т.е. указать (в процентах), сколько раз встречается та или иная буква - C (СИ)
Формулировка задачи:
#include "stdafx.h" #include "stdio.h" #include "string.h" #include "conio.h" void main() { char s1[100]; int i; char s2[10]; int m,n,b; gets_s(s1); printf("vvedite bukvu"); gets_s(s2); for (i=0;i<strlen(s1);i++) {if (s1[i]==strcmp()) m=m+1 ;} b=strlen(s1); n=b/m*100; printf("%i %",n); _getch(); } //////////
Решение задачи: «Провести частотный анализ текста, т.е. указать (в процентах), сколько раз встречается та или иная буква»
textual
Листинг программы
#include <stdio.h> #define SIZE 240-32 // ASCII code изменил параметры вставки кодов начиная с пробела и до "я" unsigned array[SIZE]; // подставляем в массив значение параметра SIZE int main(void) { int c, i, counts; counts = 0; // количество символов вводимых while((c = getc(stdin)) != EOF && c != '\n') // пока получаем с клавиатуры поток данных и нет символа конца файла if(c >= 32 && c <= 240) { // символы в диапозоне ++counts; // увеличить на один кол-во символов ++array[c-32]; // тут не пойму, здесь записывается представление символа в коде ASKII и записывается в массив? } for(i = 0; i < SIZE; ++i )// запускаем цикл для всех элементов массива if( array[i] ) // если элементо массива то printf( "symbol '%c' occur %d times, and it makes %.2f%%\n", i + 32, array[i], (double)array[i] / (double)counts * 100.0 ); // вывод представления символа/кол-во повторений/ процент от всех символов в тексте, так? putc('\n', stdout ); // вывод на экран return 0; }
Объяснение кода листинга программы
В этом коде проводится частотный анализ текста, то есть подсчитывается, сколько раз в тексте встречается каждая буква. Список действий:
- Установка параметров:
#define SIZE 240-32
- параметр SIZE, который определяет размер массива. Значение SIZE вычисляется как разница между максимальным ASCII-кодом (240) и минимальным (32), который является кодом пробела в ASCII.unsigned array[SIZE];
- создание массива типаunsigned
с размером SIZE для хранения количества вхождений каждой буквы.
- Ввод данных:
int c, i, counts; counts = 0;
- объявление и инициализация переменных.while((c = getc(stdin)) != EOF && c != '\n')
- цикл, который будет выполняться, пока считывается символ из стандартного ввода (клавиатуры), и этот символ не является символом конца файла (EOF) или символом новой строки (\n).if(c >= 32 && c <= 240)
- условие, которое проверяет, является ли символ в диапазоне от пробела (32) до максимального ASCII-кода (240).++counts;
- увеличение счетчика количества введенных символов.++array[c-32];
- увеличение значения в массивеarray
на 1 для символа, соответствующего ASCII-кодуc
.
- Вывод результатов:
for(i = 0; i < SIZE; ++i )
- цикл, который проходит по всем элементам массива.if( array[i] )
- условие, которое проверяет, больше ли значение в массиве нуля, что означает, что символ встречался в тексте.printf(
symbol '%c' occur %d times, and it makes %.2f%%\n, i + 32, array[i], (double)array[i] / (double)counts * 100.0 );
- вывод на экран информации о символе, количестве его вхождений и процентном соотношении относительно общего количества символов.
- Завершение работы программы:
putc('\n', stdout);
- вывод символа новой строки на экран.return 0;
- завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д