前提・実現したいこと
下記のプログラムで7000行×9列のcsvファイルを演算処理しプログラム文中のAverageの配列を作成しました.
ここからこの配列の奇数番目の要素だけの配列,偶数番目の要素だけの配列(仮にAverage1,2とする)を作成したいです.
どのようなプログラム文を書けばよいでしょうか?
今回使用しているcsvファイルは行数が決まっていますが,実際は新しい行,数値が追加されていくので要素数が変数になります.
※MIDIに関するプログラム文もありますがたぶん無視して大丈夫と思います
該当のソースコード
C++
1int main(){ 2 std::ifstream ifs("筋電・加速度データ.csv"); //csvファイル読み込み 3 std::string str; 4 bool flag = true; 5 std::vector<double> Balance_sum; //差(Balance)の要素 6 double Average = 0; //基準値を決める 7 MMRESULT mmres = midiOutOpen(&hMidiOut, MIDI_MAPPER, NULL, NULL, CALLBACK_NULL); //リターンコードを示す変数の型 8 //音声出力、MIDI_MAPPARは引数 9 if (mmres != MMSYSERR_NOERROR) //エラーがあった場合 10 { 11 fprintf(stderr, "MIDIが利用できません。\n"); 12 return 1; 13 } 14 15 while (getline(ifs, str)){ 16 if (flag){ 17 flag = false; 18 continue; //その行が文字列なら処理を飛ばす 19 } 20 else{ 21 int num; //行の各値をそれぞれ設定する 22 double EMGR, rightx, righty, rightz, EMGL, leftx, lefty, leftz; 23 sscanf_s(str.c_str(), "%d,%10lf,%10lf,%10lf,%10lf,%10lf,%10lf,%10lf,%10lf", &num, &EMGR, &rightx, &righty, &rightz, &EMGL, &leftx, &lefty, &leftz); 24 25 //まず左右の計測値を絶対値化 26 double RightData = rightx*rightx + righty*righty + rightz*rightz; 27 double LeftData = leftx*leftx + lefty*lefty + leftz*leftz; 28 double Balance = RightData - LeftData; //計測値の差 29 Balance_sum.push_back(Balance); //BalanceをBalance_sumの配列の末尾に要素として追加 30 } 31 } 32 double Total = 0; //1500行のBalance_sumの総和 33 34 for (int counter = 0; counter < Balance_sum.size(); counter++){ //配列の行数を一行ずつカウントしていく 35 Total = Total + Balance_sum.at(counter); //Totalに1行ずつBalance.sumの要素を足していく 36 37 if (counter % 1500 == 1499){ //カウントが1499行目(要素で言うと1500個目)になったとき 38 Average = Total / 1500; //TotalからAveragaを設定、デモデータでは差異が-0.18~0.002なので、 39 Element = Element + 1; //要素数をカウント 40 }
> プログラム文中のAverageの配列を作成しました
その配列とは,ソースコード内のどれにあたるのでしょうか?
Average = Total / 1500;
で計算された数値です.
もしかしてこのAverageは配列では無いのですか?
何が問題なのですか? どこで躓いているのですか?
「Averageの配列」と呼んでいるのは、"std::vector<double> Balance_sum; "の事ですか?(コメントを読むと、"計測値の差"の配列になりそうですが)
>>>coco_bauerさん
質問が破綻しているようで申し訳ありません.
演算処理後に出てくるAverageを奇数番目のもの,偶数番目のものに分けてAverage1とAverage2にしたいのです.
質問中でAverageのことを配列と言っていますが配列では無いかもしれません...
> double Average = 0;
これを見る限り,Averageは配列ではない.
> 演算処理後に出てくるAverageを奇数番目のもの,偶数番目のものに分けてAverage1とAverage2にしたい
とりあえず,まずは計算結果を単一の配列に格納するところから始めてみては…
提示されているソースコードの上の方を書いた人の質問とは思えないので,読込部分は別の誰かが書いたのだろうか? 可能であれば,それを書いた人に相談すべき.