Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
1

Написать функцию, которая принимает строку звуков, а возвращает звук

18.09.2010, 09:36. Показов 1200. Ответов 4
Метки нет (Все метки)

Всем привет!
В общем, я хочу разобраться с алгоритмом в такой задаче: в каком-то языке есть только 4 звука, назовем их А, В, C, D, а алфавит этого языка состоит из 10 букв: E, F, G, H, I, J, K, L, M, N. Система такая: каждым 3 звукам соответствует 1 буква согласно правилам. Вот эти правила: ABC -> G, ACD -> M, CAD -> J, CDA -> M, CCC -> A и т.д. (все правила не привожу - хочу просто общую схему алгоритма понять). Надо бы написать функцию, которая принимает строку звуков (3 символа), а возвращает звук (строка в 1 символ). Важное замечание: if, else использовать запрещается.

Помогите, пжлст, разобраться с алгоритмом этой задачи!

Спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2010, 09:36
Ответы с готовыми решениями:

Написать функцию atoi(), которая принимает параметр - строку цифр и возвращает соответствующее ей целое
Это оказалось мне не по-силам, поэтому прошу помощи,господа:) Напишите функцию atoi(), которая...

Написать функцию, которая принимает строку и возвращает максимальное количество одинаковых символов, идущих подряд
Написать функцию, которая принимает строку. В качестве результата возвращает максимальное...

Написать функцию, которая принимает два числа и возвращает
Решите пожалуйста!!!!!!!!!!! 4 ) число, которое получается, если к первому числу...

Написать функцию, которая принимает два числа и возвращает
Режить все !!!Буду благодарин!!Заранее спасибо!!

4
Заблокирован
Автор FAQ
18.09.2010, 09:48 2
На мой взгляд можно использовать оператор множественного выбора switch
Не в вдаваясь в детализацию алгоритм генерации звуков может иметь следующий вид


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
swith(ХХХ)
{
case ABC :
return G; break;
case ACD :
return M; break;
.
.
.
default :
//здесь имеет смысл предусмотреть генерацию звука по умолчанию, например если сочетание 
//не подходит ни под одну из лексем языка - (например при сбое и т.д.)
break;
};
1
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
18.09.2010, 12:11  [ТС] 3
Спасибо! А еще какой-нибудь способ есть это реализовать?
0
В астрале
Эксперт С++
8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.09.2010, 12:12 4
amfisat, Полагаю только if-else
0
ниначмуроФ
847 / 531 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
19.09.2010, 15:59 5
Цитата Сообщение от amfisat Посмотреть сообщение
а возвращает звук (строка в 1 символ).
наверно букву а не звук.

Идея с массивом:

количество перестановок всех звуков будет равна (количество звуков)! для n=5 думаю кейсами долговато будит(уже 120).
предлагаю сделать:
Массив
C++
1
mas[len]
куда будут записыватся перестановки [ len = (количество_звуков)! ]
Функцию
C++
1
2
3
4
5
6
7
void permutation(char* str, mas, len){
    int i =0;
    ....
    mas[i] = очередная перестановка
    ...
    ++i;
}
в которой будут генерироватся перестановки и записыватся в mas[];


и саму главную функцию
C++
1
char get_sound(char* str, mas, len)
в которую передаётся уже заполненный перестановками массив , его размер , и искомая строка , в которой ищется соответствие.


а лучше использовать STL: map, pair или тому подобное

Добавлено через 8 минут

Не по теме:

а мне понравился мой алгоритм )



Добавлено через 18 часов 19 минут
amfisat, создал в виде класса:

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
#include <iostream>
#include <map>
#include <algorithm>
#include <iterator>
#include <vector>
 
class notes{
        std::map <std::string, int> list_sound; //список звуков
 
        void permutation(std::string str){ //получаем все перестановки звуков и заносим их в список звуков
            int cnt_permut = 0;
            std::vector<char> v;
            for (int i=0; i < str.size(); ++i)
                v.push_back(str[i]);
            list_sound.insert(std::pair<std::string, int>(str, ++cnt_permut));
            while (next_permutation(v.begin(), v.end() ) ) {
                std::vector<char>::iterator st=v.begin();
                str.clear();
                while(st != v.end()){
                    str += *st;
                    ++st;
                }
                list_sound.insert(std::pair<std::string, int>(str, ++cnt_permut));
            }
        };
 
    public:
        explicit notes( std::string str) {permutation(str);}; // конструктор - инициализирует  список звуков
 
        int find_sound(std::string key) const{ // поиск звука
            std::map<std::string, int>::const_iterator p;
            p = list_sound.find(key);
            if (p != list_sound.end() )
                return p -> second;
            else
                return -1;
        }
 
        void show() const{
            std::map<std::string, int>::const_iterator p = list_sound.begin();
            while (p != list_sound.end() ){
                std::cout << (p->first) << " ---> " << (p->second) << std::endl;
                ++p;
            }
        }
};
 
 
 
int main(){
 
    notes albom("ABCD"); //создать
 
    albom.show();  //показать
 
    std::cout << "Звук DABC соответствует: " << albom.find_sound("DABC"); //найти
 
    return 0;
}
только я сделал чтобы выводилась не буква а цифра

+ вводить можно не только 4 буквы ABCD а хоть 10
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2010, 15:59
Помогаю со студенческими работами здесь

Написать функцию, которая принимает на вход строку и возвращает количество слов в нем
Мне нужно написать функцию, которая принимает на вход строку и возвращает количество слов в нем....

Указатели: написать функцию, которая принимает строку, и возвращает количество слов и число пробелов в ней
Помогите с решением данной задачи.Не могу разобраться в работе с указателями. Написать функцию,...

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

Написать функцию. которая аргументом принимает тип происшествия и возвращает функцию
Написать функцию. которая аргументом принимает тип происшествия и возвращает функцию, которая...


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

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

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