Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
korsarqa
7 / 7 / 0
Регистрация: 06.12.2011
Сообщений: 170
#1

Разделение функции - C++

06.06.2012, 14:36. Просмотров 535. Ответов 3
Метки нет (Все метки)

Вообщем вот задание:
Пусть имеется файл с текстовыми данными (размер не менее 1 Мб). Необходимо подсчитать следующие статистические показатели:
• количество гласных и согласных букв (заглавные и строчные буквы не различаются);
• количество слов (словом считается любая последовательность символов, состоящая из букв алфавита, в том числе неопределённые артикли);
• средняя длина слова;
• количество предложений (предложение – последовательность слов, заканчивающаяся точкой, многоточием, восклицательным или вопросительным знаком);
• средняя длина предложения.


Вот мой код к программе:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
 
using namespace std;
 
bool isVowel(char c) {
    return (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='A' || c=='E' || c=='I' || c=='O' || c=='U');
}
 
bool sentEnd(char c) {
    return (c=='.' || c=='!' || c=='?');
}
 
int countSymbols(char *fileName) {
    int res=0;
    char c;
    FILE *f=fopen(fileName, "r");
    while ((c = fgetc(f)) != EOF) {
        if (c != 10 && c != 13) {
            res++;
        }
    }
    fclose(f);
    return res;
}
 
struct numStat {
    int vowel;
    int consonant;
    int word;
    int sentances;
};
void main(){
    setlocale(LC_ALL,"");
    const int MAX_PATH = 256;
    char *fileName= new char[MAX_PATH];
    cout << "Путь к файлу: "<<endl; 
    cin >> fileName;
    FILE *f=fopen(fileName, "r");
    struct numStat count; 
    
    char c;
    count.vowel=0;
    count.consonant=0;
    count.word=0;
    count.sentances=0;
    int i=0, res;
    int strLen=0;
 
        
    if (f) {
        res=countSymbols(fileName);
        while((c=getc(f))!=EOF) {
            if ((c>='a' && c<='z') || (c>='A' && c<='Z')) {
                if (isVowel(c)) {
                    count.vowel++;
                } else {
                    count.consonant++;
                } 
            } else if (c==' ' || c=='\n') {
                if (strLen>0) count.word++;
                if (c == '\n') strLen=-1;
            } else if (sentEnd(c)) {
                count.sentances++;
            }
 
            strLen++;
        }
 
    system("cls");
    cout<<"Статистика:"<<endl<<endl<<endl;
    cout<<"Всего предложений: "<<count.sentances<<endl;
    cout<<"Всего слов: "<<count.word+1<<endl;
    cout<<"Всего букв: "<<res<<endl;
    cout<<"Гласных в тексте: "<<count.vowel<<endl;
    cout<<"Согласных в тексте: "<<count.consonant<<endl;
    cout<<"Средняя длина слова: "<<res/(count.word+1)<<endl;
    cout<<"Средняя длина предложения: "<<(count.word+1)/count.sentances<<endl;
    getch();
    } else {
        cout << "Файл не найден!" << endl;
        getch();
    }
    
}
Все работает, все хорошо. Но у меня здесь стоит еще одна задача. Функцию main мне надо разделить на 2 функции( в 1 расчет необходимых данных, во 2 просто вывод).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разделение функции (C++):

Рекурсивные функции. Разделение эл. массива, пока не останется 1 элемент - C++
Вся суть в том что нужно взять массив из 10 элементом и разделить его на пополам (например от 1 до 5 и от 6 до 10) потом левую часть...

Разделение файла. - C++
Нужна помощь в программе на С: Разделить файл.Записать строки с нечетными номерами в первый файл,строки с четными номерами во второй...

разделение массива - C++
как разделить массив помогите пожалуйста

Разделение строки - C++
Здравствуйте, помогите пожалуйста с заданием. Требуется разделить строку на предложение, предложения на слова, а затем вывести с каждого...

Разделение строки - C++
Здравствуйте, вопросик такой есть: Допустим, есть строка: &quot;/TEXT parameters from text&quot; и сама суть вопроса: Как заменить первый символ...

Разделение на .cpp и .h - C++
Здравствуйте! Прошу прощения за повтор, честно смотрела другие похожие, но все равно не разобралась. Нужно разделить программу на •...

3
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 14:56 #2
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
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <cctype>
#include <сstdio>
#include <iostream>
#include <string>
 
using namespace std;
 
bool isVowel(char c) {
    return (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='A' || c=='E' || c=='I' || c=='O' || c=='U');
}
 
bool sentEnd(char c) {
    return (c=='.' || c=='!' || c=='?');
}
 
int countSymbols(FILE* f) {
    int res=0;
    char c;
    while ((c = fgetc(f)) != EOF)
        if (c != 10 && c != 13)
            res++;
    return res;
}
 
struct numStat {
    int vowel;
    int consonant;
    int word;
    int sentances;
};
 
numStat GetStat(FILE* f) {
    numStat count;
    char c;
    count.vowel = 0;
    count.consonant = 0;
    count.word = 0;
    count.sentances = 0;
    int strLen;
    while((c=getc(f))!=EOF) {
        if ((c>='a' && c<='z') || (c>='A' && c<='Z')) {
            if (isVowel(c))
                count.vowel++;
            else
                count.consonant++;
        } else if (c==' ' || c=='\n') {
            if (strLen>0) count.word++;
            if (c == '\n') strLen=-1;
        } else if (sentEnd(c))
            count.sentances++;
 
        strLen++;
    }
    return count;
}
 
void PrintStat(const numStat& count, int res) {
    cout << "Статистика:" << endl << endl << endl;
    cout << "Всего предложений: " << count.sentances << endl;
    cout << "Всего слов: " << count.word+1 << endl;
    cout << "Всего букв: " << res << endl;
    cout << "Гласных в тексте: " << count.vowel << endl;
    cout << "Согласных в тексте: " << count.consonant << endl;
    cout << "Средняя длина слова: " << res/(count.word+1) << endl;
    cout << "Средняя длина предложения: " << (count.word+1)/count.sentances << endl;
}
 
void main() {
    setlocale(LC_ALL,"");
    cout << "Путь к файлу: " << endl; 
    string fileName;
    getline(cin, fileName);
    FILE *f = fopen(fileName.data(), "r");
 
    if (f) {
        system("cls");
        int res = countSymbols(f);
        fclose(f);
        f = fopen(fileName.data(), "r");
        PrintStat(GetStat(f), res);
        fclose(f);
    } else
        cerr << "Файл не найден!" << endl;
    system("pause");
}
1
korsarqa
7 / 7 / 0
Регистрация: 06.12.2011
Сообщений: 170
06.06.2012, 18:20  [ТС] #3
Переделал благодаря вышенаписанному:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
 
using namespace std;
 
bool isVowel(char c) {
    return (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='A' || c=='E' || c=='I' || c=='O' || c=='U');
}
 
bool sentEnd(char c) {
    return (c=='.' || c=='!' || c=='?');
}
 
int countSymbols(char *fileName) {
    int res=0;
    char c;
    FILE *f=fopen(fileName, "r");
    while ((c = fgetc(f)) != EOF) {
        if (c != 10 && c != 13) {
            res++;
        }
    }
    fclose(f);
    return res;
}
 
struct numStat {
    int vowel;
    int consonant;
    int word;
    int sentances;
};
int raschet() {
    struct numStat count;
    char c;
    count.vowel=0;
    count.consonant=0;
    count.word=0;
    count.sentances=0;
    int i=0, res;
    int strLen=0;
    const int MAX_PATH = 256;
    char *fileName= new char[MAX_PATH];
    cout << "Путь к файлу: "<<endl; 
    cin >> fileName;
    FILE *f=fopen(fileName, "r");
        
    if (f) {
        res=countSymbols(fileName);
        while((c=getc(f))!=EOF) {
            if ((c>='a' && c<='z') || (c>='A' && c<='Z')) {
                if (isVowel(c)) {
                    count.vowel++;
                } else {
                    count.consonant++;
                } 
            } else if (c==' ' || c=='\n') {
                if (strLen>0) count.word++;
                if (c == '\n') strLen=-1;
            } else if (sentEnd(c)) {
                count.sentances++;
            }
 
            strLen++;
        }
    } else {
        cout << "Файл не найден!" << endl;
        getch();
    }
    return count;
    }
void main(const numStat& count, int res){
    setlocale(LC_ALL,""); 
    system("cls");
    cout<<"Статистика:"<<endl<<endl<<endl;
    cout<<"Всего предложений: "<<count.sentances<<endl;
    cout<<"Всего слов: "<<count.word+1<<endl;
    cout<<"Всего букв: "<<res<<endl;
    cout<<"Гласных в тексте: "<<count.vowel<<endl;
    cout<<"Согласных в тексте: "<<count.consonant<<endl;
    cout<<"Средняя длина слова: "<<res/(count.word+1)<<endl;
    cout<<"Средняя длина предложения: "<<(count.word+1)/count.sentances<<endl;
    getch();
}
Ошибка: не компилируется, все дело в том, что я не знаю как надо возвращать значение
C++
1
    return count;
не работает

Добавлено через 20 минут
Блин помогите
0
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 19:04 #4
Цитата Сообщение от korsarqa Посмотреть сообщение
C++
1
int raschet()
Цитата Сообщение от korsarqa Посмотреть сообщение
C++
1
return count;
Несоответствие типов. Нужно numStat raschet();
Цитата Сообщение от korsarqa Посмотреть сообщение
C++
1
void main(const numStat& count, int res)
main не может принимать такие аргументы.
0
06.06.2012, 19:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 19:04
Привет! Вот еще темы с ответами:

Разделение числа - C++
Ув.Форумчане. Возможно ли както методами языка разделить вещественное число на целую и вещественную часть в отдельные переменные?

Разделение на файлы - C++
Здравствуйте, друзья! не подскажите почему у меня ругается, когда прогу делю на файлы. Вот куски: main.cpp /* * File: main.cpp...

Разделение потоков - C++
Нужно в главном потоке запустить 3 потока,дождаться их завершения,потом запустить ещё 3 и тоже дождаться их завершения,однако на деле идёт...

Разделение на файлы - C++
Может кто-то объяснить как разделять код на файлы? (я так понял нужно создать заглавный файл ****.h , создать файл с таким же именем с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.