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

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

Восстановить пароль Регистрация
 
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
18.09.2010, 09:36     Написать функцию, которая принимает строку звуков, а возвращает звук #1
Всем привет!
В общем, я хочу разобраться с алгоритмом в такой задаче: в каком-то языке есть только 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 использовать запрещается.

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

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2010, 09:36     Написать функцию, которая принимает строку звуков, а возвращает звук
Посмотрите здесь:

C++ Напишите функцию, которая принимает три числа в качестве параметров и возвращает их сумму.
Написать функцию, которая принимает два числа и возвращает C++
C++ Написать функцию, которая принимает два числа и возвращает
Написать функцию, которая принимает количество часов, и возвращает стоимость стоянки C++
Написать функцию, которая принимает количество часов, и возвращает стоимость стоянки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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;
};
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
18.09.2010, 12:11  [ТС]     Написать функцию, которая принимает строку звуков, а возвращает звук #3
Спасибо! А еще какой-нибудь способ есть это реализовать?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.09.2010, 12:12     Написать функцию, которая принимает строку звуков, а возвращает звук #4
amfisat, Полагаю только if-else
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
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
Yandex
Объявления
19.09.2010, 15:59     Написать функцию, которая принимает строку звуков, а возвращает звук
Ответ Создать тему
Опции темы

Текущее время: 13:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru