Я пытаюсь проверить логическую функцию от четырех входов a, b, c и d.Логическая матрица в C
Каждый вход либо 0, либо 1.
Я пытался сделать это с массивами.
Я хочу передать 1, если столбец в массиве logicXY соответствует массиву combLogic.
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
из строки, то он выполняет функцию, возвращает значение, но когда значение записывается для вывода, это не похоже на значение, которое было возвращено функцией.
EDIT
Я сделал несколько изменений в код поэтому он появляется на работе и только один предупреждение от компилятора для функции декларации в .h, что я не могу показаться, чтобы исправить.
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;
}
Loop в 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);
Если я отклониться от этого кода я просто похоже, заканчивается компилятором, который не может построить и еще больше предупреждений.
На самом деле проблема связана с декларациями 'combLogic' и' logic', вы можете проверить этот код для [Как объявить/передать 'int' 2D-martix?] (Http://stackoverflow.com/questions/17566661/ c-dynamic-array-initalization-with-declaration/17567663 # 17567663) –
Как функция знает размеры (особенно combLogic)? –
Проблемы возникают в объявлениях массивов в 'main()', а также в списке параметров. Обратите внимание, что 'int ** param' и' int param [] [4] 'не относятся к одному типу. Ваш компилятор должен жаловаться на использование '1' в качестве инициализатора в массивах. Он также должен жаловаться на несоответствия типов в вызовах 'comb()'. –