#include #include #include #define MAX 100000 #define MAXA 16 #define MAXN 8 using namespace std; const int NNUT = 12; const int NTRYB = 6; const int NID = 102; char * strNut[2][NNUT] = { {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}, {"C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"} }; char * strTryb[NTRYB] = { "maj7","min7","dim","7","7b9","7#9" }; int M[NTRYB][NNUT] = { //0 1 2 3 4 5 6 7 8 9 10 11 {0, 2, 2, 4, 4, 4, 7, 7, 9, 9,11,11}, {0, 2, 2, 3, 5, 5, 7, 7, 9, 9,10, 0}, {0, 2, 2, 3, 5, 5, 6, 8, 8, 9,11,11}, {0, 2, 2, 4, 4, 4, 7, 7, 9, 9,10, 0}, {0, 1, 3, 3, 4, 6, 6, 7, 9, 9,10, 0}, {0, 1, 3, 3, 4, 6, 6, 8, 8,10,10, 0} }; struct NBT { int n,b,t; }; NBT T[NID]; struct ltstr { bool operator()(char* s1, char* s2) const { return strcmp(s1, s2) < 0; } }; map mapAcord; map mapNote; int D[NID][NNUT]; int getNut(int a,int b) { if(b>0) return (a+b)%NNUT; else return (a+NNUT+b)%NNUT; } int mm,nn; char* I[MAX+1]; char* J[MAX+1]; char* P[MAX+1]; void readAndInit(); void countNear(int id); int main(int argc, char *argv[]) { readAndInit(); printf("P = "); for(int i=0; i mm-1) p = 0; } } printf("i=%d p=%d id=%d u=%d\n",i,p,id,u); if(j==-1) printf("_ "); else printf("%s ",strNut[b][j]); } printf("\n"); system("PAUSE"); return EXIT_SUCCESS; } void readAndInit() { mapAcord.clear(); char str[16]; int n,b,t; int id=0; for( b=0; b<2; b++) { for(t=0; t::iterator cur = mapAcord.begin(); mapAcord["dd"]=44; printf("map = %d\n", mapAcord["Cmaj7"]); /* printf(" T = \n"); for(id = 0; id