Проблемы с количеством строк, целыми числами, которые нужно плавать, формулой оценки, основанной на количестве букв, слов и предложений, в C - PullRequest
1 голос
/ 16 апреля 2020

Я пишу программу для генерации числа букв, слов и предложений при условии ввода текста.
С этими значениями я хочу сгенерировать число (оценивая «уровень читаемости») на основе формулы с числа из букв, слов и предложений в качестве переменных.

Пожалуйста, обратитесь к последнему разделу этого кода (формула оценки).

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

int main(void)
{
    char str[1000];
    int i=0, chr=0, st=1, sn=0;

    printf("Text: ");
    fgets(str, sizeof(str), stdin);

    for( i = 0; str[i] != '\0' ; i++)
    {
        chr = chr + 1;
    }

    printf("%d letters\n", chr);

    for (i = 0; i <= chr - 1; i++)
    {
        if (str[i] == ' ')
        {
            st = st + 1;
        }
    }

    printf("%d words\n", st);

    for (i = 0; i <= chr - 1; i++)
    {
        if (str[i] == '.' || str[i] == '!' || str[i] == '?')
        {
            sn = sn + 1;
        }
    }

    printf("%d sentences\n", sn);

    double L = (100.0 * chr / st);
    double S = (100.0 * sn / st);
    double grade = 0.0588 * L - 0.296 * S - 15.8;

    if (grade <= 1)
    {
        printf("Before Grade 1\n");
    }
    else if (grade < 16)
    {
        printf("Grade %f\n", round(grade));
    }
    else
    {
        printf("Grade 16+\n");
    }
}

Я не знаю, почему формула оценки дает странные результаты.

например,

Пример ввода:

There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy. 

Пример вывода:

92 letters 
17 words 
1 sentences
Grade 14 

Буквы, слова и предложения не странны- -Они ожидаются. 14 класс странный, потому что я ожидал 9 класс. Я не могу распознать закономерность, просто можно охарактеризовать странность c, поскольку результат оценки всегда больше, чем ожидаемое значение, для значений, ожидаемых выше 1 класса.

to continue, 
-Expected Grade 10 shows output Grade 16
-Expected Grade 8 shows output Grade 15
-Expected Grade 7 shows output Grade 14
-Expected Grade 5 shows output Grade 11
-Expected Grade 3 shows output Grade 10
-Expected Grade 2 shows output Grade 9

Ожидаемый до 1 класса текст дает ожидаемый результат.

Формула оценки:

index = 0,0588 * L - 0,296 * S - 15,8

где L - это среднее количество букв на 100 слов в тексте, а S - среднее количество предложений на 100 слов в тексте.

В целом, я не знаю, почему формула оценки не дает ожидаемого результата.

1 Ответ

1 голос
/ 17 апреля 2020

Я думаю, вы ошиблись насчет письма. В вашем input есть пробел, запятая и т. Д. c. Поэтому вам нужно точно рассчитать количество букв (a, b, c, d, e, f, et c) в этом предложении.

Вы можете использовать функцию isalpha для вычисления количество букв:

    for( i = 0; str[i] != '\0' ; i++)
    {
        if(isalpha(str[i]))
            chr = chr + 1;
    }

Затем другие для l oop, чтобы вычислить количество слов и предложений, используя strlen(str) вместо chr - 1

    for (i = 0; i < strlen(str); i++)
    {
        if (str[i] == ' ')
        {
            st = st + 1;
        }
    }

    printf("%d words\n", st);

    for (i = 0; i < strlen(str); i++)
    {
        if (str[i] == '.' || str[i] == '!' || str[i] == '?')
        {
            sn = sn + 1;
        }
    }

Когда я тест, я получил результат:

Text: There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy.
72 letters
16 words
1 sentences
Grade 9.000000
...