4 つの入力 a、b、c、および d から論理関数をテストしようとしています。
各入力は 0 または 1 です。
私は配列でこれを達成しようとしています。
logicXY配列の列がcombLogic配列の列と一致する場合、1を返したいと思います。
int comb(int** combLogic, int** logicXY){
int x, y, logicOut;
for ( x = 0; x < 4; x++ ){
if (logicXY[0][x] == combLogic[x]){
logicOut = 1;
}
}
return logicOut;
}
int main void(){
int** combLogic[4] = {a,b,c,d}; /*logic input*/
int** logic[4][4] = {{1,0,0,1}, {1,0,1,1}, {0,1,0,0}, {0,1}}; /*return 1 if any of these combinations match the logic input*/
int comb(combLogic, logicXY); /*send to function*/
}
関数が完全ではないことはわかっていますが、配列を正しく渡しているとは思いません。いくつかのチュートリアルを読みましたが、理論を理解できていないようです。
EDIT いくつかのステップを進めましたが、まだ機能していません。これは私が今持っているものです。
.h での関数宣言
int comb(logicInput,logicTest);
.c の関数
/* Function - Combination */
int comb(int** logicInput, int** logicTest){
int x, y, logicOut;
for ( x = 0; x < 4; x++ ){
if (logicTest[0][x] == logicInput[x]){
logicOut = 1;
}
}
return logicOut;
}
main.c の一部のループ
int output = 0;
int logicInput[4] = {0,1,1,1};
int logicTest[4][4] = {{1,0,0,1}, {1,0,1,1}, {0,1,0,0}, {0,1,1,1}};
int comb(logicInput,logicTest);
output = comb;
コードはステップオーバーint comb(logicInput,LogicTest)
し、機能を実行しません。行から取り出すint
と、関数が実行され、値が返されますが、値が出力に書き込まれると、関数から返された値とは異なります。
編集
コードにいくつかの変更を加えたので、動作しているように見え、修正できないように見える .h の関数宣言に対するコンパイラからの警告が 1 つだけあります。
warning: parameter names (without types) in function declaration [enabled by default]
.h での関数宣言
int comb(logicInput,logicTest);
.c の関数
int comb(int** logicInput, int** logicTest){ /*Points to the arrarys in the main program*/
int x, i, logicOut;
for(i = 0; i < 4; i++){ /*test each column*/
for ( x = 0; x < 4; x++ ){ /*test each row*/
if (logicTest[i][x] == logicInput[i][x]){
logicOut = 1;
break;
}
}
if(logicOut == 1)break; /*Break when logicOut == 1 the first time it happens*/
}
return logicOut;
}
main.c でループ
int output;
int logicInputC1[4] = {0,1,0,1};
int logicTestC1[4][4] = {{1,0,0,1}, {1,0,1,1}, {0,1,0,0}, {0,1,0,1}};
output = comb(logicInputC1,logicTestC1);
このコードから逸脱すると、コンパイラがビルドに失敗し、さらに多くの警告が表示されるようになります。