見出し画像

解説クラスSupport続(3)

解説クラスSupport続(3)


2024年2月20続講(初稿)!!

(3-4-124)関数「double MinMaxLine(
float*line,int size,double& maxData);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

double          Support::MinMaxLine(
    float*      line,                               // データPtr
    int         size,                               // サイズ
    double&     maxData                             // 返値:最大値
){
    float       minD;                               // データ:最小値
    float       maxD;                               // データ:最大値
    float       temp;                               // データ:比較用

    minD = *line;                                   // 初期値をセットし
    maxD = minD;                                    //
    while( --size >= 0 ){                           // サイズ分を繰返し
        temp = *line++;                             // 比較値を取り出し
        if( minD > temp ){                          // 小さいい方を
            minD = temp;                            // 新しい最大値にする
        }                                           //
        if( maxD < temp ){                          // 大きい方を
            maxD = temp;                            // 新しい最大値にする
        }                                           //
    }                                               //
    maxData = (double)maxD;                         // 最大値を返す
    return( (double)minD );                         // 最小値を返す
}

(3-4-124-A)関数名「MinMaxLine」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「float*line」で仮引数でポインタが示す実引数の
データの最小値と最大値を両方とも算出する関数です!
「line」は、一つながりの連続するデータを意味します!

(3-4-124-B)関数「MinMaxLine()」の
【仮引数】説明

double          Support::MinMaxLine(
    float*      line,                               // データPtr
    int         size,                               // サイズ
    double&     maxData                             // 返値:最大値
){

「float*line,」は、連続するメモリ上データをポインタで
示す実引数のデータ列を示すポインタです!
勿論、「float型」単精度浮動小数点型4バイト単位です!
「int size」は、計算するデータのサイズです!
「double& maxData」は、最大値を「double&」で仮引数に
対応する実引数に対して結果を返す為の仮引数です!

(3-4-124-C)関数「MinMaxLine()」の
【ローカル変数】説明

){
    float       minD;                               // データ:最小値
    float       maxD;                               // データ:最大値
    float       temp;                               // データ:比較用

「float minD;」は、結果の最小値です!
「float maxD;」は、結果の最大値です!
「float temp;」は、比較用データとして
仮引数「float*line」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!

(3-4-124-D)関数「MinMaxLine()」の
【アルゴリズム】説明

    minD = *line;                                   // 初期値をセットし
    maxD = minD;                                    //
    while( --size >= 0 ){                           // サイズ分を繰返し
        temp = *line++;                             // 比較値を取り出し
        if( minD > temp ){                          // 小さいい方を
            minD = temp;                            // 新しい最大値にする
        }                                           //
        if( maxD < temp ){                          // 大きい方を
            maxD = temp;                            // 新しい最大値にする
        }                                           //
    }                                               //
    maxData = (double)maxD;                         // 最大値を返す
    return( (double)minD );                         // 最小値を返す
}

「minD = *line;」は、最初のデータを仮の最小値として
初期化!
「maxD = minD;」は、最初のデータを仮の最大値として
初期化!
「while(--size>=0) {・・ループ中身・・}」は、
ループ条件「(--size>=0)」で仮引数「int size」分ループ
中身を実行
ループ中身「temp=*line++;if(minD>temp){minD=temp;}
if(minD<temp){minD=temp;}」と
「temp=*line++;」で一時的にCPU内部高速レジスターに
取り出し、
「if(minD>temp){minD=temp;}」で最小値の依り小さい
方を「minD」に
「if(maxD<temp){maxD=temp;}」で最大値の依り大きい
方を「maxD」にセット!
「maxData=(double)maxD;」は、
仮引数「double& maxData」にキャスト演算で「double型」
に変換後、ポインタ経由で対応する実引数に値を返します!
最後に関数の値として「return((double)minD);」と
キャスト演算で「double型」に変換するのは、ループの中身
で「float型」同士の操作を行う事で無駄なキャスト
演算(型変換)が起こらない様に考慮した為です!

(3-4-125)関数「double MinMaxLine(
double*line,int size,double& maxData);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

double          Support::MinMaxLine(
    double*     line,                               // データPtr
    int         size,                               // サイズ
    double&     maxData                             // 返値:最大値
){
    double      minD;                               // データ:最小値
    double      maxD;                               // データ:最大値
    double      temp;                               // データ:比較用

    minD = *line;                                   // 初期値をセットし
    maxD = minD;                                    //
    while( --size >= 0 ){                           // サイズ分を繰返し
        temp = *line++;                             // 比較値を取り出し
        if( minD > temp ){                          // 小さいい方を
            minD = temp;                            // 新しい最大値にする
        }                                           //
        if( maxD < temp ){                          // 大きい方を
            maxD = temp;                            // 新しい最大値にする
        }                                           //
    }                                               //
    maxData = maxD;                                 // 最大値を返す
    return( minD );                                 // 最小値を返す
}

(3-4-125-A)関数名「MinMaxLine」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「double*line」で仮引数でポインタが示す実引数の
データの最小値と最大値を両方とも算出する関数です!
「line」は、一つながりの連続するデータを意味します!

(3-4-125-B)関数「MinMaxLine()」の【仮引数】説明

double          Support::MinMaxLine(
    double*     line,                               // データPtr
    int         size,                               // サイズ
    double&     maxData                             // 返値:最大値
){

「double*line,」は、連続するメモリ上データをポインタで
示す実引数のデータ列を示すポインタです!
勿論、「double型」倍精度浮動小数点型8バイト単位です!
「int size」は、計算するデータのサイズです!
「double& maxData」は、最大値を「double&」で仮引数に
対応する実引数に対して結果を返す為の仮引数です!

(3-4-125-C)関数「MinMaxLine()」の
【ローカル変数】説明

){
    double      minD;                               // データ:最小値
    double      maxD;                               // データ:最大値
    double      temp;                               // データ:比較用

「double minD;」は、結果の最小値です!
「double maxD;」は、結果の最大値です!
「double temp;」は、比較用データとして
仮引数「double*line」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!

(3-4-125-D)関数「MinMaxLine()」の
【アルゴリズム】説明

    minD = *line;                                   // 初期値をセットし
    maxD = minD;                                    //
    while( --size >= 0 ){                           // サイズ分を繰返し
        temp = *line++;                             // 比較値を取り出し
        if( minD > temp ){                          // 小さいい方を
            minD = temp;                            // 新しい最大値にする
        }                                           //
        if( maxD < temp ){                          // 大きい方を
            maxD = temp;                            // 新しい最大値にする
        }                                           //
    }                                               //
    maxData = maxD;                                 // 最大値を返す
    return( minD );                                 // 最小値を返す
}

「minD = *line;」は、最初のデータを仮の最小値として
初期化!
「maxD = minD;」は、最初のデータを仮の最大値として
初期化!
「while(--size>=0) {・・ループ中身・・}」は、
ループ条件「(--size>=0)」で仮引数「int size」分ループ
中身を実行
ループ中身「temp=*line++;if(minD>temp){minD=temp;}
if(minD<temp){minD=temp;}」と
「temp=*line++;」で一時的にCPU内部高速レジスターに
取り出し、
「if(minD>temp){minD=temp;}」で最小値の依り小さい
方を「minD」に
「if(maxD<temp){maxD=temp;}」で最大値の依り大きい
方を「maxD」にセット!
「maxData=maxD;」は、仮引数「double& maxData」に結果
として返し最後に関数の値として「return(minD);」と
関数の結果を返します!
★注意★ファイル「Support.cpp」に記載して有る関数本文
の上部のコメントが、「整数型ラインバッファーの」と
浮動小数点型を扱う関数に関わらず誤記載しています!
勿論、コピペした時に修正忘れです?!元々作者(私)用の
覚書程度の事で公開を前提に記載して無かったが、
動作しているソースコードの状態を弄る事は止めた為に
変な記載が残って居る部分です!
ソースコード(中身)の方が正しいので注意して下さい!

★☆備考☆★
今回までで解説した「MinLine()・MaxLine()・
MinMaxLine()」に「C++」からの言語として進化した
特徴で有る多重定義(オーバーローディング)を使用して
居ますが、「C++以降」の進化した文法を御存知の人は、
「同じ様な処理」を行って居るので纏めて
「テンプレート」記述を使用したら、一発で短く記載出来
たのに何故?と訝しがる人も居ると思いますが、
解説『高速大容量の代表的処理が、画像処理』で説明した
高速化を計る為に細かいチューニングを行って居ると思っ
て頂きたい?!
恐らく、最新の高速CPUでは「テンプレート化」しても
遜色無く動く可能性が有りますが、
私は、保証いたしかねます!

(3-4-126)関数「int MaxLineIndex(
BYTE line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MaxLineIndex(
    BYTE        line[],                             // データPtr
    int         size                                // サイズ
){
    BYTE        data;                               // データ
    BYTE        temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-126-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「BYTE line[]」で仮引数を配列の形の実引数の
データの最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、仮引数「BYTE line[]」の
添え字の値と言う事に注意して下さい!

(3-4-126-B)関数「MaxLineIndex()」の
【仮引数】説明

int             Support::MaxLineIndex(
    BYTE        line[],                             // データPtr
    int         size                                // サイズ
){

「BYTE line[],」は、配列の形の連続するメモリ上データを
ポインタで示す実引数のデータ列を示すポインタです!
データの単位は「unsigned char」と1バイト符号なし整数
です!
「int size」は、計算するデータのサイズです!

(3-4-126-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    BYTE        data;                               // データ
    BYTE        temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「BYTE data;」は、結果の最大値レジスターへ一時的な
置き場所!
「BYTE temp;」は、比較用データとして
仮引数「BYTE line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!
「int i;」は、配列「BYTE line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-126-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と
「temp=line[i];」で一時的にCPU内部高速レジスターに
取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexも
更新します!
最後に関数の値として「return( ix );」と最大時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-127)関数「int MaxLineIndex(
short line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MaxLineIndex(
    short       line[],                             // データPtr
    int         size                                // サイズ
){
    short       data;                               // データ
    short       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-127-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「short line[]」で仮引数を配列の形の実引数の
データの最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、
仮引数「short line[]」の添え字の値と言う事に注意して
下さい!

(3-4-127-B)関数「MaxLineIndex()」の
【仮引数】説明

int             Support::MaxLineIndex(
    short       line[],                             // データPtr
    int         size                                // サイズ
){

「short line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「short型」と2バイト符号あり整数です!
「int size」は、計算するデータのサイズです!

(3-4-127-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    short       data;                               // データ
    short       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「short data;」は、結果の最大値レジスターへ一時的な
置き場所!
「short temp;」は、比較用データとして
仮引数「short line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!「int i;」は、
配列「short line[]」のアクセス添え字とサイズ分探索
するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-127-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と
「temp=line[i];」で一時的にCPU内部高速レジスター
に取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexも
更新します!
最後に関数の値として「return( ix );」と最大時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-128)関数「int MaxLineIndex(
int line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MaxLineIndex(
    int         line[],                             // データPtr
    int         size                                // サイズ
){
    int         data;                               // データ
    int         temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-128-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「int line[]」で仮引数を配列の形の実引数のデータの
最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、仮引数「int line[]」の
添え字の値と言う事に注意して下さい!

(3-4-128-B)関数「MaxLineIndex()」の
【仮引数】説明

int             Support::MaxLineIndex(
    int         line[],                             // データPtr
    int         size                                // サイズ
){

「int line[],」は、配列の形の連続するメモリ上データを
ポインタで示す実引数のデータ列を示すポインタです!
データの単位は「int型」と4バイト符号あり整数です!
「int size」は、計算するデータのサイズです!

(3-4-128-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    int         data;                               // データ
    int         temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「int data;」は、結果の最大値レジスターへ一時的な
置き場所!
「int temp;」は、比較用データとして
仮引数「int line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!「int i;」は、配列「int line[]」の
アクセス添え字とサイズ分探索するカウンター値を
示します!「カウンタ」若しくは「添字」と呼称!

(3-4-128-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexを
更新します!
最後に関数の値として「return( ix );」と
最大時Indexを関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-129)関数「int MaxLineIndex(
UWORD line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」
格納されて居て次の様に

int             Support::MaxLineIndex(
    UWORD       line[],                             // データPtr
    int         size                                // サイズ
){
    UWORD       data;                               // データ
    UWORD       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-129-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「UWORD line[]」で仮引数を配列の形の実引数の
データの最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、仮引数「UWORD line[]」の
添え字の値と言う事に注意して下さい!

(3-4-129-B)関数「MaxLineIndex()」の
【仮引数】説明

int             Support::MaxLineIndex(
    UWORD       line[],                             // データPtr
    int         size                                // サイズ
){

「UWORD line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「UWORD型」と2バイト符号無し整数です!
「int size」は、計算するデータのサイズです!

(3-4-129-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    UWORD       data;                               // データ
    UWORD       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「UWORD data;」は、結果の最大値レジスターへ一時的な
置き場所!
「UWORD temp;」は、比較用データとして
仮引数「UWORD line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!
「int i;」は、配列「UWORD line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-129-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexも
更新します!
最後に関数の値として「return( ix );」と最大時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-130)関数「int MaxLineIndex(
DWORD line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MaxLineIndex(
    DWORD       line[],                             // データPtr
    int         size                                // サイズ
){
    DWORD       data;                               // データ
    DWORD       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-130-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「DWORD line[]」で仮引数を配列の形の実引数の
データの最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、仮引数「DWORD line[]」の
添え字の値と言う事に注意して下さい!

(3-4-130-B)関数「MaxLineIndex()」の【仮引数】説明

int             Support::MaxLineIndex(
    DWORD       line[],                             // データPtr
    int         size                                // サイズ
){

「DWORD line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「DWORD型」と2バイト符号無し整数です!
「int size」は、計算するデータのサイズです!

(3-4-130-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    DWORD       data;                               // データ
    DWORD       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「DWORD data;」は、結果の最大値レジスターへ一時的な
置き場所!
「DWORD temp;」は、比較用データとして
仮引数「DWORD line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!
「int i;」は、配列「DWORD line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-130-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexも
更新します!
最後に関数の値として「return( ix );」と最大時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-131)関数「int MaxLineIndex(
float line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MaxLineIndex(
    float       line[],                             // データPtr
    int         size                                // サイズ
){
    float       data;                               // データ
    float       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-131-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「float line[]」で仮引数を配列の形の実引数の
データの最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、仮引数「float line[]」の
添え字の値と言う事に注意して下さい!

(3-4-131-B)関数「MaxLineIndex()」の
【仮引数】説明

int             Support::MaxLineIndex(
    float       line[],                             // データPtr
    int         size                                // サイズ
){

「float line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「float型」と単精度浮動小数点4バイト
実数です!
「int size」は、計算するデータのサイズです!

(3-4-131-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    float       data;                               // データ
    float       temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「float data;」は、結果の最大値レジスターへ一時的な
置き場所!
「float temp;」は、比較用データとして
仮引数「float line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!
「int i;」は、配列「float line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-131-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexも
更新します!
最後に関数の値として「return( ix );」と最大時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-132)関数「int MaxLineIndex(
double line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MaxLineIndex(
    double      line[],                             // データPtr
    int         size                                // サイズ
){
    double      data;                               // データ
    double      temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

(3-4-132-A)関数名「MaxLineIndex」の説明

「Max」は、英単語「maximum」の略≪最大≫を意味する
英単語です!
詰り「double line[]」で仮引数を配列の形の実引数の
データの最大値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MaxLine()」での
最大値と言う数値では無く、仮引数「double line[]」の
添え字の値と言う事に注意して下さい!

(3-4-132-B)関数「MaxLineIndex()」の
【仮引数】説明

int             Support::MaxLineIndex(
    double      line[],                             // データPtr
    int         size                                // サイズ
){

「double line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「double型」と倍精度浮動小数点8バイト
実数です!
「int size」は、計算するデータのサイズです!

(3-4-132-C)関数「MaxLineIndex()」の
【ローカル変数】説明

){
    double      data;                               // データ
    double      temp;                               // データ:比較用
    int         ix;                                 // 最大時Index
    int         i;                                  // カウンタ:添字

「double data;」は、結果の最大値レジスターへ一時的な
置き場所!
「double temp;」は、比較用データとして
仮引数「double line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最大値の時の添え字の値です!
最大時Indexと呼称!
「int i;」は、配列「double line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-132-D)関数「MaxLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最大時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data < temp ){                          // 最大値を
            data = temp;                            // 更新し
            ix   = i;                               // 最大時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最大時Indexを返す
}

「ix=0;」は、最大時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最大値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最大値の依り
大きい方を「data」にセットし、その時の最大時Indexも
更新します!
最後に関数の値として「return( ix );」と最大時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-133)関数「int MinLineIndex(
BYTE line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    BYTE        line[],                             // データPtr
    int         size                                // サイズ
){
    BYTE        data;                               // データ
    BYTE        temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-133-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「BYTE line[]」で仮引数を配列の形の実引数のデータ
の最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「BYTE line[]」の
添え字の値と言う事に注意して下さい!

(3-4-133-B)関数「MinLineIndex()」の
【仮引数】説明

int             Support::MinLineIndex(
    BYTE        line[],                             // データPtr
    int         size                                // サイズ
){

「BYTE line[],」は、配列の形の連続するメモリ上データを
ポインタで示す実引数のデータ列を示すポインタです!
データの単位は「unsigned char」と1バイト符号なし整数
です!
「int size」は、計算するデータのサイズです!

(3-4-133-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    BYTE        data;                               // データ
    BYTE        temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「BYTE data;」は、結果の最小値レジスターへ一時的な
置き場所!
「BYTE temp;」は、比較用データとして
仮引数「BYTE line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最小値の時の添え字の値です!
最小時Indexと呼称!
「int i;」は、配列「BYTE line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-133-D)関数「MinLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexも
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-134)関数「int MinLineIndex(
short line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    short       line[],                             // データPtr
    int         size                                // サイズ
){
    short       data;                               // データ
    short       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-134-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「short line[]」で仮引数を配列の形の実引数のデータ
の最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「short line[]」の
添え字の値と言う事に注意して下さい!

(3-4-134-B)関数「MinLineIndex()」の
【仮引数】説明

int             Support::MinLineIndex(
    short       line[],                             // データPtr
    int         size                                // サイズ
){

「short line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「short型」と2バイト符号あり整数です!
「int size」は、計算するデータのサイズです!

(3-4-134-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    short       data;                               // データ
    short       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「short data;」は、結果の最小値レジスターへ一時的な
置き場所!
「short temp;」は、比較用データとして
仮引数「short line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所「int ix;」は、最小値の
時の添え字の値です!最小時Indexと呼称!
「int i;」は、配列「short line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!「カウンタ」
若しくは「添字」と呼称!

(3-4-134-D)関数「MinLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexも
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-135)関数「int MinLineIndex(
int line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    int         line[],                             // データPtr
    int         size                                // サイズ
){
    int         data;                               // データ
    int         temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-135-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「int line[]」で仮引数を配列の形の実引数のデータの
最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「int line[]」の
添え字の値と言う事に注意して下さい!

(3-4-135-B)関数「MinLineIndex()」の
【仮引数】説明

int             Support::MinLineIndex(
    int         line[],                             // データPtr
    int         size                                // サイズ
){

「int line[],」は、配列の形の連続するメモリ上データを
ポインタで示す実引数のデータ列を示すポインタです!
データの単位は「int型」と4バイト符号あり整数です!
「int size」は、計算するデータのサイズです!

(3-4-135-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    int         data;                               // データ
    int         temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「int data;」は、結果の最小値レジスターへ一時的な
置き場所!
「int temp;」は、比較用データとして
仮引数「int line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最小値の時の添え字の値です!
最小時Indexと呼称!
「int i;」は、配列「int line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-135-D)関数「MinLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexも
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-136)関数「int MinLineIndex(
UWORD line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    UWORD       line[],                             // データPtr
    int         size                                // サイズ
){
    UWORD       data;                               // データ
    UWORD       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-136-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「UWORD line[]」で仮引数を配列の形の実引数の
データの最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「UWORD line[]」の
添え字の値と言う事に注意して下さい!

(3-4-136-B)関数「MinLineIndex()」の
【仮引数】説明

int             Support::MinLineIndex(
    UWORD       line[],                             // データPtr
    int         size                                // サイズ
){

「UWORD line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「UWORD型」と2バイト符号無し整数です!
「int size」は、計算するデータのサイズです!

(3-4-136-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    UWORD       data;                               // データ
    UWORD       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「UWORD data;」は、結果の最小値レジスターへ一時的な
置き場所!
「UWORD temp;」は、比較用データとして
仮引数「UWORD line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最小値の時の添え字の値です!
最小時Indexと呼称!
「int i;」は、配列「UWORD line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-136-D)関数「MinLineIndex()」の
【アルゴリズム】説明

){
    UWORD       data;                               // データ
    UWORD       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexを
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-137)関数「int MinLineIndex(
DWORD line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    DWORD       line[],                             // データPtr
    int         size                                // サイズ
){
    DWORD       data;                               // データ
    DWORD       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-137-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「DWORD line[]」で仮引数を配列の形の実引数の
データの最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「DWORD line[]」の
添え字の値と言う事に注意して下さい!

(3-4-137-B)関数「MinLineIndex()」の
【仮引数】説明

int             Support::MinLineIndex(
    DWORD       line[],                             // データPtr
    int         size                                // サイズ
){

「DWORD line[],」は、配列の形の連続するメモリ上データ
をポインタで示す実引数のデータ列を示すポインタです!
データの単位は「DWORD型」と2バイト符号無し整数です!
「int size」は、計算するデータのサイズです!

(3-4-137-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    DWORD       data;                               // データ
    DWORD       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「DWORD data;」は、結果の最小値レジスターへ一時的な
置き場所!
「DWORD temp;」は、比較用データとして
仮引数「DWORD line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最小値の時の添え字の値です!
最小時Indexと呼称!
「int i;」は、配列「DWORD line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-137-D)関数「MinLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexも
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-138)関数「int MinLineIndex(
float line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    float       line[],                             // データPtr
    int         size                                // サイズ
){
    float       data;                               // データ
    float       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-138-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「float line[]」で仮引数を配列の形の実引数の
データの最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「float line[]」の
添え字の値と言う事に注意して下さい!

(3-4-138-B)関数「MinLineIndex()」の【仮引数】説明

int             Support::MinLineIndex(
    float       line[],                             // データPtr
    int         size                                // サイズ
){

「float line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「float型」と単精度浮動小数点4バイト
実数です!
「int size」は、計算するデータのサイズです!

(3-4-138-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    float       data;                               // データ
    float       temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「float data;」は、結果の最小値レジスターへ一時的な
置き場所!
「float temp;」は、比較用データとして
仮引数「float line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最小値の時の添え字の値です!
最小時Indexと呼称!
「int i;」は、配列「float line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-138-D)関数「MinLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行!
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と「temp=line[i];」で
一時的にCPU内部高速レジスターに取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexを
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

(3-4-139)関数「int MinLineIndex(
double line[],int size);」の説明

この関数の本体は、ファイル「Support.cpp」に格納
されて居て次の様に

int             Support::MinLineIndex(
    double      line[],                             // データPtr
    int         size                                // サイズ
){
    double      data;                               // データ
    double      temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

(3-4-139-A)関数名「MinLineIndex」の説明

「Min」は、英単語「minimum」の略≪最小≫を意味する
英単語です!
詰り「double line[]」で仮引数を配列の形の実引数の
データの最小値を示す添え字を算出する関数です!
「line」は、一つながりの連続するデータを意味します!
「Index」は、インデックス⇒C言語的には、日本語で
「添え字」と書くデータ列の(0から始まる配列)添字を
意味します!
この関数の返し値(Return)は、関数「MinLine()」での
最小値と言う数値では無く、仮引数「double line[]」の
添え字の値と言う事に注意して下さい!

(3-4-139-B)関数「MinLineIndex()」の
【仮引数】説明

int             Support::MinLineIndex(
    double      line[],                             // データPtr
    int         size                                // サイズ
){

「double line[],」は、配列の形の連続するメモリ上
データをポインタで示す実引数のデータ列を示すポインタ
です!
データの単位は「double型」と倍精度浮動小数点8バイト
実数です!
「int size」は、計算するデータのサイズです!

(3-4-139-C)関数「MinLineIndex()」の
【ローカル変数】説明

){
    double      data;                               // データ
    double      temp;                               // データ:比較用
    int         ix;                                 // 最小時Index
    int         i;                                  // カウンタ:添字

「double data;」は、結果の最小値レジスターへ一時的な
置き場所!
「double temp;」は、比較用データとして
仮引数「double line[]」から一旦、CPU内部の高速
レジスターへ一時的な置き場所!
「int ix;」は、最小値の時の添え字の値です!
最小時Indexと呼称!
「int i;」は、配列「double line[]」のアクセス添え字と
サイズ分探索するカウンター値を示します!
「カウンタ」若しくは「添字」と呼称!

(3-4-139-D)関数「MinLineIndex()」の
【アルゴリズム】説明

    ix   = 0;                                       // 最小時Index初期化
    data = line[0];                                 // 初期値をセットし
    for( i = 1; i < size; i++ ){                    // サイズ分を繰返し
        temp = line[i];                             // 比較値を取り出し
        if( data > temp ){                          // 最小値を
            data = temp;                            // 更新し
            ix   = i;                               // 最小時Index更新
        }                                           //
    }                                               //
    return( ix );                                   // 最小時Indexを返す
}

「ix=0;」は、最小時Indexの初期化です!
「data=line[0];」は、最初のデータを仮の最小値として
初期化!
「for(i=1;i<size;i++) {・・ループ中身・・}」は、
教科書的forループ構文「(i=1;i<size;i++)」で
「1からカウンタ」を始め仮引数「int size」未満ループ
中身を繰り返し実行
ループ中身「temp=line[i];
if(data<temp){data=temp;ix=i;}」と
「temp=line[i];」で一時的にCPU内部高速レジスターに
取り出し、
「if(data<temp){data=temp;ix=i;}」で最小値の依り
小さい方を「data」にセットし、その時の最小時Indexも
更新します!
最後に関数の値として「return( ix );」と最小時Indexを
関数の値として返します!
★注意★そこまで高速性が要求されない所で極教科書的な
記述で分かり易く記述した関数です!

★注意★ファイル「Support.cpp」に記載して有る関数本文
の上部のコメントが、「整数型ラインバッファーの」と
浮動小数点型を扱う関数に関わらず誤記載しています!
勿論、コピペした時に修正忘れです?!
元々作者(私)用の覚書程度の事で公開を前提に記載して
無かったが、動作しているソースコードの状態を弄る事は
止めた為に変な記載が残って居る部分です!
ソースコード(中身)の方が正しいので注意して下さい!

★☆備考☆★
今回までで解説した「MinLineIndex()・
MaxLineIndex())」に「C++」からの言語として進化
した特徴で有る多重定義(オーバーローディング)を使用
して居ますが、「C++以降」の進化した文法を御存知の
人は、「同じ様な処理」を行って居るので纏めて
「テンプレート」記述を使用したら、一発で短く記載出来
たのに何故?と訝しがる人も居ると思いますが、
前に説明した「MinLine()・MaxLine()・
MinMaxLine()」は、高速化チューニングの為との理屈を
付けましたが、今回の「○○Index()系」は
「テンプレート」の使用方法・作成方法に長けている人に
は、容易に中身の速度的パフォーマンスを落とすことなく
テンプレート化する事は容易でしょう!
ここでは、テンプレート記述を採用シナカッタ、
言い訳≪まず、存在を知った時に私が理解して無かった?!
そして「<型名>」と「<>」を括弧として使用する記法が、
表示した時の見掛けが気に入ら無かったからとツマラナイ
理由です!
未だに「<>」記法は馴染め無いのが正直な所です!≫、
尚、ファイル「Support.cpp」は、文字コードの
ソースコードで提供していますので読者様が、自由に変更
する事は可能です!
ただし、ソースコードを変更したモノは、私が公開した
モノとは、異なりますので!
私としては、保証はできません!!

★備考★
解説『解説クラスTypeArray』でも記載したが、
noteエディタの変な特性でコピペした文章の半角「*」
が消されたり、空白「 」が消される事が多々あります!
注意して手作業で修正している筈ですが、必ず、code
機能で表示して居る物を正しいとして確認して下さい

上記まででファイル「Support.cpp」の解説は、
終わりました!
引き続きファイル「Support.h」の終わりの方に記載して
有る!
「inline関数群」に付いて解説して
「クラスSupport」の解説を完了します!

(3-4-140)インライン関数の説明

この関数の本体は、ファイル「Support.h」に格納
されて居て次の様に

/********************************************************************************************/
/*****  inline関数群                                                              *****/
/********************************************************************************************/

public:                                         // inline関数
    inline int  MaxLine(                        // 最大値:ライン:long
        long*   line,                           // ライン情報Ptr
        int     size                            // ライン長
    ){
        return( MaxLine( (int*)line, size ) );  // 左記で実行
    }

    inline int  MinLine(                        // 最小値:ライン:long
        long*   line,                           // ライン情報Ptr
        int     size                            // ライン長
    ){
        return( MinLine( (int*)line, size ) );  // 左記で実行
    }

    inline int  MinMaxLine(                                 // 最小値最大値:ライン:long
        long*   line,                                       // ライン情報Ptr
        int     size,                                       // ライン長
        int&    maxData                                     // 返値:最大値
    ){
        return( MinMaxLine( (int*)line, size, maxData ) );  // 左記で実行
    }

    int     MaxLineIndex(                                   // 最大値時Index:ライン:long
                long        line[],                         // ライン情報Ptr
                int         size                            // ライン長
    ){
        return( MaxLineIndex( (int*)line, size ) );         // 左記で実行
    }

    int     MinLineIndex(                                   // 最小値時Index:ライン:long
                long        line[],                         // ライン情報Ptr
                int         size                            // ライン長
    ){
        return( MinLineIndex( (int*)line, size ) );         // 左記で実行
    }
};

(3-4-140-1)関数「inline int MaxLine(
long* line,int size){・・中身・・}」

中身「return( MaxLine( (int*)line, size ) );」
と仮引数をキャストしただけ!

(3-4-140-2)関数「inline int MinLine(
long* line,int size){・・中身・・}」

中身「return( MinLine( (int*)line, size ) );」
と仮引数をキャストしただけ!

(3-4-140-3)関数「inline int MinMaxLine(long*line,int size,int&maxData){・・中身・・}」

中身「return( MinMaxLine((int*)line, size, int&maxData ) );」
と仮引数をキャストしただけ!

(3-4-140-4)関数「int MaxLineIndex(
long line[],int size){・・中身・・}」

中身「return( MaxLineIndex( (int*)line, size ) );」
と仮引数をキャストしただけ!

(3-4-140-5)関数「int MinLineIndex(
long line[],int size){・・中身・・}」

中身「return( MinLineIndex( (int*)line, size ) );」
と仮引数をキャストしただけ!

★注意★ここで、「MaxLineIndex()」・「MinLineIndex()」
には、解説していて気付いたのだが、「inline」を付けて
無い⇒WindowsのVCでは翻訳は正常に動作した!
モウ忘れたが、実験的に「inline」を外して見た気がする
⇒処理系(コンパイラシステム)に依っては、
「inline」を付けないと駄目かも知れ無いので
ご自身のお使いに成る処理系に合わせて下さい!

★★☆備考☆★★

ココまでで画像処理ライブラリ内のサポート的クラス【class Support{}】の
解説を解説『解説クラスSupport』
解説『解説クラスSupport続き』
解説『解説クラスSupport続(2)』
解説『解説クラスSupport続(3)』
4つの解説文章で解説しました!これで完結です!

文末

いいなと思ったら応援しよう!