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

Программа для определения минорных аккордов от мажорных - C++

Восстановить пароль Регистрация
 
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
01.04.2014, 19:05     Программа для определения минорных аккордов от мажорных #1
В общем решил для облегчения игры на гитаре написать программу для определения минорных аккордов от мажорных. Вдаваться в подробности не буду. Скажу проще. Каждому аккорду соответствует свой минорный. Таким образом C=Am, A=Fm и т.д.
Я решил такую программу написать. Столкнулся с такой проблемой. Я хотел реализовать программу и в обратном порядке (то есть писать Fm, и выводит A) и получилось что char невозможно использовать

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
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    setlocale( LC_ALL,"Russian" );
    char accord;
    char c;
    cout << "Введите Название аккорда" << endl;
    cin >> (accord);
    switch (accord)
    {
    case 'A':
        {
        cout << "Минорный аккорд для A - Fm (пентатоника 1-ый лад или 13-ый лад) " << endl;
        break;
        }
    case 'B':
        {
        cout << "Минорный аккорд для B (H) - Gm (пентатоника 3-ый лад или 15-ый лад) " << endl;
        break;
        }
    case 'C':
        {
        cout << "Минорный аккорд для C - Am (пентатоника 5-ый лад или 17-ый лад) " << endl;
        break;
        }
    case 'D':
        {
        cout << "Минорный аккорд для D - Bm (Hm) (пентатоника 7-ый лад или 19-ый лад) " << endl;
        break;
        }
    case 'E':
        {
        cout << "Минорный аккорд для E - Cm (пентатоника 8-ый лад или 20-ый лад) " << endl;
        break;
        }
    case 'F':
        {
        cout << "Минорный аккорд для F - Dm (пентатоника 10-ый лад или 22-ый лад) " << endl;
        break;
        }
    case 'G':
        {
        cout << "Минорный аккорд для G - Em (пентатоника 0-ой лад или 24-ый лад) " << endl;
        break;
        }
    case 'H':
        {
        cout << "Минорный аккорд для H (B) - Gm (пентатоника 3-ый лад или 15-ый лад) " << endl;
        break;
        }
    case 'Am':
        {
        cout << "Минорный аккорд для Am - C (пентатоника 8-ый лад или 20-ый лад) " << endl;
        break;
        }
    case 'Bm':
        {
        cout << "Минорный аккорд для Bm (Hm) - D (пентатоника 10-ый лад или 22-ый лад) " << endl;
        break;
        }
    case 'Cm':
        {
        cout << "Минорный аккорд для Cm - E (пентатоника 0-ой лад или 24-ый лад) " << endl;
        break;
        }
    case 'Dm':
        {
        cout << "Минорный аккорд для Dm - F (пентатоника 1-ый лад или 13-ый лад) " << endl;
        break;
        }
    case 'Em':
        {
        cout << "Минорный аккорд для Em - G (пентатоника 3-ый лад или 15-ый лад) " << endl;
        break;
        }
    case 'Fm':
        {
        cout << "Минорный аккорд для Fm - A (пентатоника 5-ый лад или 17-ый лад) " << endl;
        break;
        }
    case 'Gm':
        {
        cout << "Минорный аккорд для Gm - B (H) (пентатоника 7-ый лад или 19-ый лад) " << endl;
        break;
        }
    case 'Hm':
        {
        cout << "Минорный аккорд для Hm (Bm) - D (пентатоника 10-ый лад или 22-ый лад) " << endl;
        break;
        }
    }
c = getch();
    if (c==32) 
    {
        cout<<"enter!"<<endl;
        exit(0);
    }
return 0;
}
Примитивно, но всё же. Помогите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 19:05     Программа для определения минорных аккордов от мажорных
Посмотрите здесь:

C++ программа определения функции...
C++ Программа для определения дня недели для произвольной даты
C++ Массив. Программа для определения максимального подъема 100-километровой автотрассы.
Программа с использованием перезагрузки ф-ций для определения абсолютного значения числа C++
C++ Программа для определения кода клавиши выдает неверный код кнопок
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,189
Завершенные тесты: 1
01.04.2014, 19:15     Программа для определения минорных аккордов от мажорных #2
Можно для мажора использовать ctrl+Символ
а для минора shift+Символ.
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
01.04.2014, 19:17  [ТС]     Программа для определения минорных аккордов от мажорных #3
zss, это будет слишком сложно (не для написания, а для пользования)
Я так понимаю, что char предусматривает ввод одного символа. А мне, выходит, можно попробовать string?
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,189
Завершенные тесты: 1
01.04.2014, 19:41     Программа для определения минорных аккордов от мажорных #4
Тогда не воспользоваться switch.
Придется сравнивать строки для каждого случая.
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
02.04.2014, 21:06  [ТС]     Программа для определения минорных аккордов от мажорных #5
zss, охх. Ладно. Попробуем

Добавлено через 12 часов 3 минуты
Снова проблема. Решил не вбивать каждый минорный аккорд, а попробовать с вычислениями. Это будет дольше, но более ёмко, чем вписывать каждый аккорд и т.д. и т.п.
Суть определения минорного аккорда такова:
1. Строится кварта от нужной ноты (Допустим аккорд С (До) будет иметь CDEFGABC(До Рэ Ми Фа Соль Ля Си До) и т.д.)
2. Берётся 6 нота (в случае с До это A (ля)), и достраивается уже от ля, при том, что на второй ноте мы отступим не тон, а полтона, и на шестой ноте мы отступим полтона. Так же учитывается что между E(ми) и F(фа) - полтона и между С и B тоже полтона.
Не знаю. Понятно ли я объяснил...
Пожалуйста, помогите
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 21:10     Программа для определения минорных аккордов от мажорных #6
симбиоз музыканта и программера - суровая жесть
имхо - нарисуй класс с семью нотами и от них бемоли и диезы, вроде понятней будет для восприятия...
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
02.04.2014, 21:32  [ТС]     Программа для определения минорных аккордов от мажорных #7
fmtuner, ничего не понял
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 23:34     Программа для определения минорных аккордов от мажорных #8
вообще мне кажется что ты тут всем голову морочишь
есть аккорд мажорный, а есть минорный, Am - это минорный от А (ну как пример).
а то что ты хочешь - двинуть на пол-тона существующий
IrineK
Заблокирован
02.04.2014, 23:41     Программа для определения минорных аккордов от мажорных #9
Цитата Сообщение от fmtuner Посмотреть сообщение
есть минорный, Am - это минорный от А
Речь идет о параллельных тональностях: ля минор - до мажор, ре минор - фа мажор и т.д.
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 02:43     Программа для определения минорных аккордов от мажорных #10
слушай точно, а я что-то между строк читаю

Добавлено через 2 часа 50 минут
Получилось примерно вот так
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
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");
    char acc[2];
    cout<<"Введите аккорд"<<endl;
    cin>>acc;
    /**Звуки это тоны и полутоны - два последовательно идущих звука - это полутон.
        Малая терция - 3 полутона
        Тоника параллельной тональности находится
          на малую терцию вниз если от мажора ищем минор
        и на малую терцию вверх если от минора ищем мажор.
                    0     1       2   3       4  5     6         7       8      9   10     11  12   (1 единица = 1 полутону)
       имеем      : До (Do#=Reb) Ре (Re#=Mib) Ми Фа (Fa#=Solb) Соль (Sol#=Lab) Ля (La#=Sib) Си До
                    С      m      D    m      E   F     m        G      m       A     m      B  m
    **/
    ///Создадим массив из 13 элементов (номера элементов будут являться полутонами, элементы - звуками)
    char notes[]="CmDmEFmGmAmBm"; ///13 элементов по 1 символу
    ///Пользователь будет вводить нам название аккорда, который будет иметь или 1 символ или 2
    int j=0;
    for (int i=0;i<13;i++){
        if (acc[0]==notes[i])
        {
            j=i;
            if (i<3) j+=12;
            if (acc[1]!=NULL) j+=1;
            if (notes[j-3]=='m') {
                    cout<<"Минорный аккорд - это "<<notes[j-4]<<notes[j-3];
            }
            else {
                    cout<<"Минорный аккорд - это "<<notes[j-3];
            }
        }
    }
 
 
 
    return 0;
}
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
03.04.2014, 13:37  [ТС]     Программа для определения минорных аккордов от мажорных #11
fmtuner, спасииибо с: Сейчас проверю у преподавателя по музыке, правильно ли всё определено

Добавлено через 1 минуту
А вот не совсем верно... В некоторых случаях (например с Ля мажор) параллельной тональностью будет Фа диез минор (F#m) а не Fm. Как решить проблему в данном случае?
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 13:44     Программа для определения минорных аккордов от мажорных #12
ты там описание смотрел? буква "m" - это и есть отсылка на диез (или бемоль).
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
03.04.2014, 13:48  [ТС]     Программа для определения минорных аккордов от мажорных #13
То есть выходит, что если выводит m то это минорный с диезом?
А нельзя бы как-нибудь сделать так, чтобы выводилось "Параллельная тональность: " и название тональности с диезом и буквой m?
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 13:50     Программа для определения минорных аккордов от мажорных #14
C++
1
                    cout<<"Минорный аккорд - это "<<notes[j-4]<<"#";
вот эту строчку замени на такую - будет проще восприятию

Добавлено через 1 минуту
Димас, ты бы написал что тебе надо, а то непонятно - в топике тебе надо было найти параллельную МИНОРНУЮ, теперь просто параллельную
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
03.04.2014, 13:51  [ТС]     Программа для определения минорных аккордов от мажорных #15
fmtuner, Извини, просто спутал параллельные-минорные...
Мне нужна программа для определения параллельных тональностей.
Я переправил и получил знаете что?
Выводит Параллельная тональность - mm. На все вводимые данные
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 13:52     Программа для определения минорных аккордов от мажорных #16
чё то ты не там исправил

Добавлено через 24 секунды
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");
    char acc[2];
    cout<<"Введите аккорд"<<endl;
    cin>>acc;
    /**Звуки это тоны и полутоны - два последовательно идущих звука - это полутон.
        Малая терция - 3 полутона
        Тоника параллельной тональности находится
          на малую терцию вниз если от мажора ищем минор
        и на малую терцию вверх если от минора ищем мажор.
                    0     1       2   3       4  5     6         7       8      9   10     11  12   (1 единица = 1 полутону)
       имеем      : До (Do#=Reb) Ре (Re#=Mib) Ми Фа (Fa#=Solb) Соль (Sol#=Lab) Ля (La#=Sib) Си До
                    С      m      D    m      E   F     m        G      m       A     m      B  m
    **/
    ///Создадим массив из 13 элементов (номера элементов будут являться полутонами, элементы - звуками)
    char notes[]="CmDmEFmGmAmBm"; ///13 элементов по 1 символу
    ///Пользователь будет вводить нам название аккорда, который будет иметь или 1 символ или 2
    int j=0;
    for (int i=0;i<13;i++){
        if (acc[0]==notes[i])
        {
            j=i;
            if (i<3) j+=12;
            if (acc[1]!=NULL) j+=1;
            if (notes[j-3]=='m') {
                    cout<<"Минорный аккорд - это "<<notes[j-4]<<"#";
            }
            else {
                    cout<<"Минорный аккорд - это "<<notes[j-3];
            }
        }
    }
 
 
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 18:54     Программа для определения минорных аккордов от мажорных
Еще ссылки по теме:

Программа для определения даты следующего дня C++
Программа для определения угла между векторами C++
Программа для определения всех натуральных чисел, которые заканчиваются на 2 C++

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

Или воспользуйтесь поиском по форуму:
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 115
03.04.2014, 18:54  [ТС]     Программа для определения минорных аккордов от мажорных #17
fmtuner, теперь всё идеально
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
#include <iostream>
#include <locale>
#include <conio.h>
using namespace std;
 int main()
{
    char c;
    setlocale(LC_ALL,"RUS");
    char acc[2];
    cout<<"Введите основную тональность: ";
    cin>>acc;
    /**Звуки это тоны и полутоны - два последовательно идущих звука - это полутон.
        Малая терция - 3 полутона
        Тоника параллельной тональности находится
          на малую терцию вниз если от мажора ищем минор
        и на малую терцию вверх если от минора ищем мажор.
                    0     1       2   3       4  5     6         7       8      9   10     11  12   (1 единица = 1 полутону)
       имеем      : До (Do#=Reb) Ре (Re#=Mib) Ми Фа (Fa#=Solb) Соль (Sol#=Lab) Ля (La#=Sib) Си До
                    С      m      D    m      E   F     m        G      m       A     m      B  m
    **/
    ///Создадим массив из 13 элементов (номера элементов будут являться полутонами, элементы - звуками)
    char notes[]="CmDmEFmGmAmBm"; ///13 элементов по 1 символу
    ///Пользователь будет вводить нам название аккорда, который будет иметь или 1 символ или 2
    int j=0;
    for (int i=0;i<13;i++){
        if (acc[0]==notes[i])
        {
            j=i;
            if (i<3) j+=12;
            if (acc[1]!=NULL) j+=1;
            if (notes[j-3]=='m') {
                    cout<<"Параллельная тональность - это "<<notes[j-4]<<"#m";
            }
            else {
                    cout<<"Параллельная тональность - это "<<notes[j-3]<<"m";
            }
        }
    }
  
 c = _getch();
    if (c==32) 
    {
        cout<<"enter!"<<endl;
        exit(0);
    }
return 0;
}
Добавлено через 19 секунд
А в конце эт так, чтобы сразу не закрывалась

Добавлено через 2 минуты
Теперь нужно всё так же придумать для диезных тональностей

Добавлено через 4 часа 48 минут
ВАУ, ДА ОНА ДЛЯ ДИЕЗОВ ТОЖ РАБОТАЕТ *О*
Yandex
Объявления
03.04.2014, 18:54     Программа для определения минорных аккордов от мажорных
Ответ Создать тему
Опции темы

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