Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
koperfild
9 / 9 / 6
Регистрация: 04.12.2011
Сообщений: 137
1

Упростить перебор

03.12.2013, 13:18. Просмотров 451. Ответов 1
Метки нет (Все метки)

0. Можно ли использовать допустим char word[30]; или зарезервированные слова никак?
Может ли функция иметь имя как и её внутренняя переменная. Т.е.
C
1
2
3
4
5
int count(int n){
int count;
count=n;
return count;
}
1. Не понимаю в чём ошибка. Программа по поиску причастий из текста ( в файле).
Везде где встречается определённая функция stem, начиная с 60 строчки пишет undefined reference to stem(...)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
char *PerfectiveGerund[]={
    "12",
    "ав","яв","авши","явши","авшись","явшись","ив","ивши","ившись","ыв","ывши","ывшись"
};
 
char *adjectivalend[]={
    "26",
    "ее", "ие", "ые","ое","ими","ыми","ей","ий","ый","ой","ем","им","ым",
    "ом","его","ого","ему","ому","их","ых","ую","юю","ая","яя","ою","ею"
};
 
char *participlesuf[]={
    "12",
    "ущ","ющ","ащ","ящ","вш","ш","ем","ом","им","нн","енн","т"
};
 
char *shortparticipleend[]={
    "3",
    "ы","а","о"
};
 
char *shortparticiplesuf[]={//Качан будет причастием
    "3",
    "ан","ян","ен"
};
 
 
char *superlativesuf[]={
    "2",
    "ейш","ейше"
};
//26 okon4anii
int stem(char *, char *part[]);
int Mystrstr(char *,char *);
int cons(char *);
int vowel(char *);
 
int main(){
    char token[30];//stroka xran9sha9 tekyshee slovo
    char *pch;
    FILE *f=fopen("input.txt","r");
    int participlecount=0;
    while (fscanf(f,"%s",token)==1){
        if (strlen(token)==1){//sly4ai vs9kix + - , predlogov iz 1 bykvi
            continue;
        }
        //////////////////////////////////////
        //do vsex preobrazovanii videl9t 4ast slova s 1 glasnooi. Rv po algoritmy
        pch=strtok(token,".,!?:;");//otdelenie ot slov znakov sto9shix vplotnyu
        if (strtok(pch,"0123456789")){//Проверка не число ли это или прил. Пример, 9-тикратный
            continue;
        }
        if (strtok(pch,"-")!=NULL){//esli v slove defis to eto ili syshestvitelnoe ili prilagatelnoe
            continue;
        }
        if (stem(pch,PerfectiveGerund)){//Тогда это деепричастие
            continue;
        }
        if (Mystrstr(pch,"ся")){//ся+прил окончание => причастие. Не пройдут "пейся, лейся и т.д."
            if (stem(pch,adjectivalend)){
                ++participlecount;//нашли
 
                continue;
            }
            ;//иначе false и return
 
        }
        if (Mystrstr(pch,"ть")){//глагол
            continue;
        }
        if (vowel(pch)<2){//Число гласных во всех причастиях >=2
            continue;
        }
        if (stem(pch,adjectivalend)){
            if (stem(pch,superlativesuf)){//Прилагательное в превосходной форме
                continue;
            }
            if (stem(pch,participlesuf)){//polnie pri4asti9
                ++participlecount;//нашли
 
                continue;
            }
        }
        if (stem(pch,shortparticiplesuf)){//краткие причастия мужского рода (без окончания)//Качан будет причастием
            ++participlecount;//нашли
 
            continue;;
        }
        if (stem(pch,shortparticipleend)&&stem(pch,shortparticiplesuf)){//kratkie pri4asti9
            ++participlecount;//нашли
 
            continue;
        }
    }
    printf("%d",participlecount);
    char c;
    scanf("%c",&c);
    return 0;
}
 
int Mystrstr(char *pch,char *needle){//1, если needle входит в слово, 0 - иначе
    int L,k;
 
    L=strlen(pch);
    k=strlen(needle);
    if (L<k){
        return 0;
    }
    while (k>0){
        if (pch[L-1]!=needle[k-1]){
            return 0;
        }
        L--;
        k--;
    }
    pch[L]='\0';
    return 1;
}
 
int stem(char *pch, char *part[],int n){//1 esli nashel vxojdeni9. 0- ina4e.
    n=atoi(part[0]);//длина массива окончаний/суффиксов
    for (int i=1;i<n;++i){
        if (Mystrstr(pch,part[i])){//slovo soderjit part[i](okon4anie/suffix) v konce
            return 1;
        }
    }
    return 0;
}
 
 
 
int cons(char *p){//proverka glasna9 li bykva
    switch (*p){
        case 'а': case 'о': case 'у': case 'ы': case 'и': case 'э': case 'я': case 'ё': case 'ю': case 'е': return 1;
        default: return 0;
    }
}
 
int vowel(char *p){//return 4islo glasnix
    int L=strlen(p);
    int nvowel=0;
    for (int i=0;i<L;++i,++p){
        if (cons(p)){
            ++nvowel;
        }
    }
    return nvowel;//mojet bit odno im9 y peremennoi i fynkcii v kotoroi ona naxodits9?esli da to nazvat fynkciu nvowel
}
2. Нужно не только посчитать количество причастий, но и вести учёт сколько раз встретилось конкретное причастие. А это при большом тексте очень и очень большое время для поиска одинаковых слов в массиве причастий. Да ещё и массив ограничен. Придётся записывать в файл. Нужны идеи как наименее затратно по вычислениям вести встреченные слова и количество их появлений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 13:18
Ответы с готовыми решениями:

Перебор. Дана матрица a[n][n]
Здравствуйте. Помогите пожалуйста с заданиями. Перебор. Дана матрица a найти в...

Перебор элементов динамического списка
задача программы: находит сумму последнего и предпоследнего элементов списка L,...

Перебор всех номеров автомашин
программа компилируется, при включении консоль остается пустой, занимает около...

Перебор возможных комбинаций символов
Чет мой чайник совсем не варит! Помогите сделать следущее: Вывести все...

Упростить выражение
Помогите пожалуйста, у меня походу код не правильный: 1) #include &lt;stdio.h&gt;...

1
koperfild
9 / 9 / 6
Регистрация: 04.12.2011
Сообщений: 137
09.12.2013, 22:52  [ТС] 2
В чём ошибка проги? Пункт 1
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 22:52

Упростить код
Задача передо мной такая:реализовать веб-сервер, клиентом у которого является...

Упростить программу
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #define BUFSIZE 256 int main()...

Упростить решение
На фотографии условие, вот мое решение(работает корректно): #include &lt;stdio.h&gt;...


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

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

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