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

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

Войти
Регистрация
Восстановить пароль
 
Jack63
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 13
#1

исправить функцию нахождения гласных букв в массиве - C++

03.10.2011, 00:39. Просмотров 460. Ответов 4
Метки нет (Все метки)

Помогите,пожалуйста, исправить функцию, которая суммирует вероятности нахождения букв в строке(строка массив типа char,слова разделены пробелами). Если хотя бы в одном слове нет гласных букв,то вероятность строки считаем 0. Если во всех словах есть гласные буквы,то вероятность равна сумме вероятностей всех букв в строке.
вроде просто сделать, но как только не пробовал - не получается. исправить нужно до 24.00 (мск)

этот вариант выдает все нули

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
double functionVer(const char buffer[],int i) 
        {
         double ver=0;
         int u[50];
         int gh=0;
        for(int k=0;k<i;k++) 
        {
                  if(buffer[k]==char(65)) {  u[gh]++; ver+=7.96;       u[gh]++;}
                  if(buffer[k]==char(66)) {ver+=1.6;}
                  if(buffer[k]==char(67)) {ver+=2.48;}
                      if(buffer[k]==char(68)) {ver+=4.01;}
                      if(buffer[k]==char(69)) {  u[gh]++; ver+=12.86;    }
                      if(buffer[k]==char(70)) {ver+=2.62;}
                      if(buffer[k]==char(71)) {ver+=1.99;}
                  if(buffer[k]==char(72)) {ver+=5.39;}
                       if(buffer[k]==char(73)) { u[gh]++; ver+=7.77;      }
            if(buffer[k]==char(74)) {ver+=0.16;}
            if(buffer[k]==char(75)) {ver+=0.41;}
            if(buffer[k]==char(76)) {ver+=3.51;}
            if(buffer[k]==char(77)) {ver+=2.43;}
            if(buffer[k]==char(78)) {ver+=7.51;}
            if(buffer[k]==char(79)) { u[gh]++; ver+=6.62;      }
            if(buffer[k]==char(80)) {ver+=1.81;}
            if(buffer[k]==char(81)) {ver+=0.17;} //нет в таблице - подправить;
            if(buffer[k]==char(82)) {ver+=6.83;}
            if(buffer[k]==char(83)) {ver+=6.62;}
            if(buffer[k]==char(84)) {ver+=9.72;}
            if(buffer[k]==char(85)) { u[gh]++; ver+=2.48;    }
            if(buffer[k]==char(86)) {ver+=1.15;}
            if(buffer[k]==char(87)) {ver+=1.8;}
            if(buffer[k]==char(88)) {ver+=0.17;}
            if(buffer[k]==char(89)) {u[gh]++; ver+=1.52;      }
            if(buffer[k]==char(90)) {ver+=0.05;}
            if(buffer[k]==(' ')) {  u[gh++]; } 
 
        }
             while(gh!=0) {
            if (u[gh]==0)
                  {return ver=0.0;}
                u[gh]--;
             }
            return ver;
     
        }
этот оставляет все как есть(т.е. не зануляет вероятности где нужно)

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
double functionVer(const char buffer[],int i) //вероятность для n-ой строки;
        {
         double ver=0;
         int u=0;
        for(int k=0;k<i;k++) 
        {
            if(buffer[k]==char(65)) {  u++; ver+=7.96;     }
            if(buffer[k]==char(66)) {ver+=1.6;}
            if(buffer[k]==char(67)) {ver+=2.48;}
                        if(buffer[k]==char(68)) {ver+=4.01;}
                        if(buffer[k]==char(69)) {  u++; ver+=12.86;    }
                        if(buffer[k]==char(70)) {ver+=2.62;}
                        if(buffer[k]==char(71)) {ver+=1.99;}
            if(buffer[k]==char(72)) {ver+=5.39;}
            if(buffer[k]==char(73)) { u++; ver+=7.77;      }
            if(buffer[k]==char(74)) {ver+=0.16;}
            if(buffer[k]==char(75)) {ver+=0.41;}
            if(buffer[k]==char(76)) {ver+=3.51;}
            if(buffer[k]==char(77)) {ver+=2.43;}
            if(buffer[k]==char(78)) {ver+=7.51;}
            if(buffer[k]==char(79)) { u++; ver+=6.62;      }
            if(buffer[k]==char(80)) {ver+=1.81;}
            if(buffer[k]==char(81)) {ver+=0.17;} //нет в таблице - подправить;
            if(buffer[k]==char(82)) {ver+=6.83;}
            if(buffer[k]==char(83)) {ver+=6.62;}
            if(buffer[k]==char(84)) {ver+=9.72;}
            if(buffer[k]==char(85)) { u++; ver+=2.48;    }
            if(buffer[k]==char(86)) {ver+=1.15;}
            if(buffer[k]==char(87)) {ver+=1.8;}
            if(buffer[k]==char(88)) {ver+=0.17;}
            if(buffer[k]==char(89)) {u++; ver+=1.52;      }
            if(buffer[k]==char(90)) {ver+=0.05;}
            if(buffer[k]==(' ')) {if (u=0) { return ver = 0;} else u=0; }
 
        }
          
            return ver;
     
        }
Добавлено через 1 час 41 минуту
помогите,пожалуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2011, 00:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос исправить функцию нахождения гласных букв в массиве (C++):

Написать функцию нахождения нечетных чисел в массиве - C++
Задан массив целых чисел. Вывести на экран элементы, являющиеся нечетными числами. Реализовать для двух функции одна для int массива другая...

Подскажите функцию для нахождения количества единиц в битовом массиве - C++
Ребят, подскажите функцию для нахождения количества единиц в битовом массиве.

Написать функцию для нахождения в одномерном массиве суммы элементов, кратных 7 - C++
Написать функцию для решения следующей задачи. Найти в одномерном массиве сумму элементов кратных 7. Параметры функции – одномерный...

Вставить функцию в код по подсчету времени на нахождения ключа в массиве (бинарный поиск) - C++
помогите вставить функцию в код по подсчету времени на нахождения ключа в массиве(бинарный поиск) . вот код #include &lt;stdlib.h&gt; ...

Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа. - C++
Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа.

Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа. - C++
Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
03.10.2011, 01:58 #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
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <cstring>
 
using namespace std;
 
const double prob_table[]
{
    7.96,  // A
    1.6,   // B
    2.48,  // C
    4.01,  // D
    12.86, // E
    2.62,  // F
 
    // дальше заполняйте таблицу сами
 
    0,     // G
    0,     // H
    0,     // ...
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,    // X
    0,    // Y
    0     // Z
};
 
bool isvowel( char c )
{
    c = toupper( c );
    return c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'Y';
}
 
double count_prob( const char * str )
{
    double prob = 0;
    char prev;
    bool has_vowels = false;
 
    while( *str )
    {
        if( isspace( *str ) )
        {
            if( !isspace( prev ) )
            {
                // если в предыдущем слове не было гласных
                if( !has_vowels )
                   return 0;
 
                // в новом слове пока не было гласных
                has_vowels = false;
            }
        }
        else
        {
            if( isalpha( *str ) )
                prob += prob_table[ toupper(*str) - 'A' ];
 
            if( isvowel( *str ) )
                has_vowels = true;
        }
 
        prev = *str;
        str++;
    }
 
    return prob;
}
 
int main()
{
    char *str1 = "hello world";
    char *str2 = "aaloha";
    char *str3 = "no hell below us, above us only sky";
    char *str4 = "hello bwvzxt world";
 
    cout << "str1: " << str1 << " - " << count_prob( str1 ) << '\n'
         << "str2: " << str2 << " - " << count_prob( str2 ) << '\n'
         << "str3: " << str3 << " - " << count_prob( str3 ) << '\n'
         << "str4: " << str4 << " - " << count_prob( str4 ) << '\n';
 
    return 0;
}
Удачи.
1
Jack63
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 13
03.10.2011, 02:01  [ТС] #3
спасибо большое!
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.10.2011, 18:13 #4
А еще, если пишем на C++, то можно воспользоваться std::map.
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
04.10.2011, 18:15 #5
fasked, можно, но есть ли смысл? Поиск в дереве и обращение по индексу - это несколько разные по производительности вещи
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2011, 18:15
Привет! Вот еще темы с ответами:

вывод гласных букв - C++
Пишешь слово, он должен вывести только гласные буквы. Например, hello должен вывести e o #include &lt;iostream&gt; #define N 80 using...

Подсчет гласных букв - C++
Написать програму которая считает сколько в веденой пользователем строке гласнихбукв и четных цыфр! С++

Подсчитать количество гласных букв - C++
Задание 1 Дана непустая строка S. Подсчитать сколько гласных букв в строке.

Подсчитать количество гласных букв - C++
Дана строка-предложение на английском языке. Подсчитать количество содержащихся в строке гласных букв


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.10.2011, 18:15
Ответ Создать тему
Опции темы

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