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

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

Войти
Регистрация
Восстановить пароль
 
 
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 116
#1

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

01.04.2014, 19:05. Просмотров 660. Ответов 16
Метки нет (Все метки)

В общем решил для облегчения игры на гитаре написать программу для определения минорных аккордов от мажорных. Вдаваться в подробности не буду. Скажу проще. Каждому аккорду соответствует свой минорный. Таким образом 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;
}
Примитивно, но всё же. Помогите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 19:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа для определения минорных аккордов от мажорных (C++):

Программа для определения дня недели для произвольной даты - C++
Доброго времени суток! Суть программы состоит в том, что нужно определить день недели для даты dd/mm/gg, если известен день недели 1 января...

Программа для определения даты следующего дня - C++
помогите написать программу в для определения даты следующего дня

Программа для определения угла между векторами - C++
Я нашел такую программу внизу, немного исправил ее, но не знаю, что watch означает и зачем он вообще и все ли тут правильно. Мне...

Программа для определения попадания точки с координатами (x, y) в мишень - C++
Здравствуйте, помогите пожалуйста в с++ создать алгоритм для определения попадания точки с координатами (x, y) в мишень. вот рисунок:

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

Массив. Программа для определения максимального подъема 100-километровой автотрассы. - C++
Здравствуйте! Вот написал программу, но не устраивает меня тем, что нужно выдавать самый длинный подъем, так и есть, но вот как написать от...

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

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

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

Добавлено через 1 минуту
Димас, ты бы написал что тебе надо, а то непонятно - в топике тебе надо было найти параллельную МИНОРНУЮ, теперь просто параллельную
0
Dimas-Karabas
28 / 5 / 1
Регистрация: 15.04.2013
Сообщений: 116
03.04.2014, 13:51  [ТС] #15
fmtuner, Извини, просто спутал параллельные-минорные...
Мне нужна программа для определения параллельных тональностей.
Я переправил и получил знаете что?
Выводит Параллельная тональность - mm. На все вводимые данные
0
03.04.2014, 13:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 13:51
Привет! Вот еще темы с ответами:

Программа для определения кода клавиши выдает неверный код кнопок - C++
Доброго времени суток. У меня есть вопросик. Вот моя программа: // Программа для определения кода клавиши #include &lt;conio.h&gt; ...

Программа с использованием перезагрузки ф-ций для определения абсолютного значения числа - C++
У меня завтра экзамен. Я решила все задачи кроме одной. Помогите пожалуйста или подскажите как сделать! Вот и задача! Программа с...

Программа для определения IP - Софт
Вообщем, мне нужна программа, которая показывала бы имя компьютер и айпи адрес на рабочем столе. Попробовал 2 программки: desktopinfo и...

Программа для определения IP - Assembler
Приветствую... Люди, подскажите пожалуйста, возможно ли на асме написать программу, которая будет определять IP адрес ПК, на котором...


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

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

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