配列内比較
最大値と最小値の取得
配列内の情報の取得は、プログラムの過程でよく出てくる問題です
とくに、構造的な事務処理プログラムなどには必要ですね
顧客情報や金銭管理など、関連情報は一つの配列または構造体にまとめるのが一般的です
となれば、ユーザーの要求で特定の情報を引き出すのもまた宿命です
配列要素の情報を効率的に引き出す必要がありますね
配列のデータを比較するには、反復プログラムが適しています
配列内の最大値を得るには適当な値を変数 m に格納し
その値と配列の先頭から比較し、mよりも大きい値があればそれをmに格納します
if (ary[0] > m ) m = ary[0];
if (ary[1] > m ) m = ary[1];
if (ary[i]...
最小値を得る場合は、この逆を選択すればよいですね
int getArrayMax(int *ary , int last_index) {
int count , max;
max = *ary;
for (count = 0 ; count < last_index ; count++) {
if (*(ary + count) > max) max = *(ary + count);
}
return max;
}
int getArrayMin(int *ary , int last_index) {
int count , min;
min = *ary;
for (count = 0 ; count < last_index ; count++) {
if (*(ary + count) < min) min = *(ary + count);
}
return min;
}
getArrayMax()関数は、第一引数を配列の先頭とし
第二引数まで配列要素を比較します
その中でもっとも大きかった最大値を戻り値として返します
getArrayMin()関数は、その逆で最も最小値を戻り値として返します
同様の方法で、指定した値が配列内に存在するかどうかも確認できます
int arrayCheck(int *ary , int date , int last_index) {
int count;
for (count = 0 ; count < last_index ; count++) {
if (*(ary + count) == date) return 1;
}
return 0;
}
第二引数に指定した値が配列に存在すれば1を
存在しない場合は0を返します
同一値の検出
データベースなどでは、基本的にまったく同じ内容のデータを拒否します
ここでは、配列内に同じデータがないかをチェックするアルゴリズムを考えましょう
同一データの検出の場合、まず配列の先頭の値を変数 x に格納します
次に、xの次の要素から最後の要素まで x と比較します
見つからなかった場合はxに格納した値の次の要素をxに格納し
その次の要素から再び検索します
x = array[0];
if (array[1] == x)...
if (array[2] == x)...
x = array[1];
if (array[2] == x)...
この作業を、同一値が見つかるか最後まで行います
int isArraySame(int *ary , int last_index) {
int count , n_count , same;
for (count = 0 ; count < last_index - 1; count++) {
same = *(ary + count);
for (n_count = count + 1 ; n_count < last_index ; n_count++) {
if (*(ary + n_count) == same) return 1;
}
}
return 0;
}
配列内に同じ値が重複している場合は1を
値の重複が見とめられなければ0を返します
かなり余談なのですが
筆者がプログラムをやり始めたころ、憧れたのが掛け算の九九表を
反復ループで作るアルゴリズムでした
もっとも、今思えばこのアルゴリズムはとぉ〜〜〜っても簡単ですけど
ネストした反復ループの基本的な利用法ですので、チェックしておきたいですね
#include <stdio.h>
int main() {
int i , j;
for (i = 1 ; i < 10 ; i++) {
for (j = 1 ; j < 10 ; j++) {
printf("%2d " , i * j);
}
printf("\n");
}
return 0;
}