0 / 0 / 0
Регистрация: 19.02.2018
Сообщений: 92
1

Найти в тексте слово, в котором доля гласных одинакова с другим словом

28.11.2018, 19:37. Показов 1369. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как переделать эту программу,чтобы она,если доля гласных в нескольких словах одинакова,выводила их,а не только одно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <cctype>
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int _tmain()
{
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char s[100000];//строка
char *S, *mas[100000];
int N;
 
//Ввод текста
cout << "Введите текст на АНГЛИЙСКОМ языке!!!:" << endl;
cin.getline(s, strlen(s)); //ввод строки
fflush(stdin); //очистка буфера потока и сбрасывание ошибок
int f = strlen(s); //длина строки
int i,j;
for (i = 0; i<f; i++)
if (((s[i] >= 'А') && (s[i] <= 'я')))
{
cout << "Ошибка ввода!"<< endl;
_tmain();
}
 
// преобразование строки s в массив строк
N=0; // количество слов
S=strtok(s," ");
while(S!=NULL)
{ mas[N]=S; S=strtok(NULL," "); N++; }
 
//Подсчёт доли гласных букв
float gl, sl;
float *r = new float[f]; //массив для записи доли гласных букв
char *str;
for (i = 0; i<N; i++)
{   sl = 0; //  счетчик букв в слове
gl = 0; // счетчик гласных букв в слове
str=mas[i];
for (j = 0; j<strlen(str); j++)
{ sl++;
if ((str[j] == 'a') || (str[j] == 'A') || (str[j] == 'o') || (str[j] == 'O') || (str[j] == 'u') || (str[j] == 'U') || (str[j] == 'i') || (str[j] == 'I') || (str[j] == 'e') || (str[j] == 'E') || (str[j] == 'y') || (str[j] == 'Y'))
gl++;
}
r[i] = gl / sl; }
 
// поиск слова с максимальной долей гласных букв и вывод результата
float max;
int k;
max=0;
for (i = 0; i<N; i++)
{ if (r[i]>=max) { max=r[i];
k=i;     } }
if (max==0) cout << "Слова с гласными буквами отсутствуют";
else cout << "Слово, в котором доля гласных  максимальна: "<< mas[k];
 
getch();
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2018, 19:37
Ответы с готовыми решениями:

Во введенном тексте найти слово, в котором доля гласных максимальна
Разработать программу, определяющую во введенном тексте на английском языке слово, в котором доля...

Во введенном тексте указать слово, в котором доля гласных (а, е, о) максимальна
Во введенном тексте указать слово, в котором доля гласных (а, е, о) максимальна.

Во введенном тексте указать слово, в котором доля гласных (а, е, о) максимальна
Во введенном тексте указать слово, в котором доля гласных (а, е, о) максимальна. Программа...

Найти слово, в котором доля гласных (a, e, i, o, u, y) максимальна
Доброго времени суток! Собственно начну с задания: Разработать программу, определяющую во...

5
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
29.11.2018, 00:16 2
F1xie, здравствуйте! Не стал исправлять вашу программу. Написал свою. Текст из латинских символов считывается из файла input.txt. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <cmath> 
#include <string> 
#include <fstream> 
#include <regex>
#include <iterator>
 
    using namespace std;
 
int main() {
    ifstream fin("input.txt");
    if (fin.good()) {
        regex e("([A-Za-z]+)");
        char vowels[12] = { 'A', 'a', 'O', 'o', 'U', 'u', 'I', 'i', 'E', 'e', 'Y', 'y',};
        int k;
        double frac, max;
        vector<pair<string, double>> v; 
        string str, word;
        max = 0.0;
        while (getline(fin, str)) {
            regex_iterator<string::iterator> it(str.begin(), str.end(), e);
            regex_iterator<string::iterator> end;
            for (; it != end; ++it) {
                word = it->str();
                k = 0;
                for (int i = 0; i < word.length(); i++) {
                    for (int j = 0; j < 12; j++) {
                        if (word[i] == vowels[j]) {
                            k++;    
                        }
                    }
                }
                frac = (double) k / word.length();
                v.push_back(make_pair(word, frac));
                if (frac > max) {
                    max = frac;
                }
            }
        }
        cout << "Output of the program:\n\n";
        k = 0;
        for (int i = 0; i < v.size(); i++) {
            if (fabs(v[i].second - max) < 0.00000001) {
                k++;
                cout << k << ". " << v[i].first << "\n";
            }
        }
        fin.close();
    } else {
        cout << "No file input.txt found!\n";
    }
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 19.02.2018
Сообщений: 92
29.11.2018, 18:36  [ТС] 3
Fixer_84, мне необходимо именно мою программу переделать
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
29.11.2018, 20:02 4
Лучший ответ Сообщение было отмечено F1xie как решение

Решение

Цитата Сообщение от F1xie Посмотреть сообщение
Fixer_84, мне необходимо именно мою программу переделать
F1xie, вот. Подкорректировал ваш код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <cctype>
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
 
    using namespace std;
 
int _tmain() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char s[100000]; //строка
    char *S, *mas[100000];
    int N;
    //Ввод текста
    cout << "Введите текст на АНГЛИЙСКОМ языке!!!:" << endl;
    cin.getline(s, 100000); //ввод строки
    fflush(stdin); //очистка буфера потока и сбрасывание ошибок
    int f = strlen(s); //длина строки
    int i, j;
    for (i = 0; i < f; i++)
        if (((s[i] >= 'А') && (s[i] <= 'я'))) {
            cout << "Ошибка ввода!" << endl;
        }
    // преобразование строки s в массив строк
    N = 0; // количество слов
    S = strtok(s, " ");
    while (S != NULL) {
        mas[N] = S;
        S = strtok(NULL, " ");
        N++;
    }
    //Подсчёт доли гласных букв
    float gl, sl;
    float* r = new float[f]; //массив для записи доли гласных букв
    char* str;
    for (i = 0; i < N; i++) {
        sl = 0; // счетчик букв в слове
        gl = 0; // счетчик гласных букв в слове
        str = mas[i];
        for (j = 0; j < strlen(str); j++) {
            sl++;
            if ((str[j] == 'a') || (str[j] == 'A') || (str[j] == 'o') || (str[j] == 'O') || (str[j] == 'u') || (str[j] == 'U') || (str[j] == 'i') || (str[j] == 'I') || (str[j] == 'e') || (str[j] == 'E') || (str[j] == 'y') || (str[j] == 'Y'))
                gl++;
        }
        r[i] = gl / sl;
    }
    // поиск слова с максимальной долей гласных букв и вывод результата
    float max;
    int k;
    max = 0;
    for (i = 0; i < N; i++) {
        if (r[i] >= max) {
            max = r[i];
        }
    }
    cout << "\nВывод результата работы программы:\n\n";
    if (max == 0) {
    cout << "Слова с гласными буквами отсутствуют!\n";
    return 0;
    }
    for (i = 0; i < N; i++) {
        if (r[i] == max) {
            cout << mas[i] << "\n";
        }
    }
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 19.02.2018
Сообщений: 92
04.12.2018, 16:22  [ТС] 5
Fixer_84, теперь если я ввожу русские буквы или цифры программа просто закрывается
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
09.12.2018, 16:45 6
Цитата Сообщение от F1xie Посмотреть сообщение
Fixer_84, теперь если я ввожу русские буквы или цифры программа просто закрывается
Здравствуйте! Часть кода из поста #4 в строках 24-27 можно закомментировать. Программа работает только для латинских гласных, но вы можете добавить русские гласные в условии проверки, если нужна доля гласных для русских слов.
0
09.12.2018, 16:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 16:45
Помогаю со студенческими работами здесь

Найти в текстовом файле слово, доля гласных в котором максимальна
Помогите написать программу: Найти в текстовом файле слово, доля гласных в котором максимальна.

Для каждого слова предложения (внутри) указать долю гласных. Определить слово, в котором доля гласных максимальна
Для каждого слова предложения указать долю гласных. Определить слово, в котором доля гласных...

Определить слово, в котором доля гласных максимальна.
В заданном предложении указать слово, в котором доля гласных максимальна. Считать, что слова в...

Указать слово, в котором доля гласных максимальна
В заданном предложении указать слово,в котором доля гласных максимальная.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru