// // Programmer: Craig Stuart Sapp // Creation Date: Sat Feb 1 08:50:37 PST 2003 // Last Modified: Sat Feb 1 08:50:37 PST 2003 // Filename: /usr/web/peabody/class/dmp2/lab/markov1/markov1.cpp // Syntax: C++ // $Smake: g++ -O3 -o %b %f && strip %b // // Description: Realizes Markov chain values for example. // #include #include #define STATES 3 int transitionTable[STATES][STATES]; // function declarations: double randfloat (void); int chooseNextEventFromTable (int current, int table[STATES][STATES]); void setTable (int value, int table[STATES][STATES]); ////////////////////////////////////////////////////////////////////////// int main(void) { int i; // for demo purposes: transitionTable[0][0] = 20; transitionTable[0][1] = 50; transitionTable[0][2] = 30; transitionTable[1][0] = 35; transitionTable[1][1] = 25; transitionTable[1][2] = 40; transitionTable[2][0] = 70; transitionTable[2][1] = 14; transitionTable[2][2] = 16; int currentState = 0; for (i=0; i<1000; i++) { cout << currentState << " "; currentState = chooseNextEventFromTransitionTable(currentState); } return 0; }; ////////////////////////////////////////////////////////////////////////// ////////////////////////////// // // chooseNextEventFromTransitionTable -- choose the next note. // int chooseNextEventFromTransitionTable(int currentState) { int targetSum = 0; int sum = 0; int targetNote = 0; int totalevents = 0; int i; currentState = currentState % STATES; // remove any octave value for (i=0; i