ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
19 марта
658845 Топик полностью
Nikolay801_ (08.03.2016 19:07 - 19:12, просмотров: 173) ответил Yft на Посоветуйте, как покрасивше написать код!?
ну можно вот так сделать #define BM(x) 1<<x typedef uint8_t tVec; #define CABLE_NUM (4) /* талица соединений строка - один кабель в каждой строке элемент соотв. контакту на левом разъеме в этом элементе каждому биту соответсвуют контакты правого разъема */ static const tVec crossTab[CABLE_NUM][sizeof(tVec)*8] = { {0, BM(0), 0, 0, 0, 0, 0, 0}, {0, BM(1), 0, 0, 0, 0, 0, 0}, {0, BM(2), 0, 0, 0, 0, 0, 0}, {0, BM(3), 0, 0, 0, 0, 0, 0}, }; void setOut(tVec val){}; tVec getIn(void){}; /**/ int bitCnt(tVec val){ int count = 0; for(int i = 0; i < sizeof(tVec)*8; i++) if (val & (BM (i))) count++; return count; } /******************************************************************************* * *******************************************************************************/ void checkCable(void){ tVec cable[sizeof(tVec)*8] = {0}; //test run one for(int i = 0; i < sizeof(tVec)*8; i++){ setOut(BM(i)); cable[i] = getIn(); } //search candidat int candidat; int hamDistCandidate; for(int i = 0; i < CABLE_NUM; i++){ int hamDist = 0; for(int j = 0; j < sizeof(tVec)*8; j++){ hamDist += bitCnt(cable[j] ^ crossTab[i][j]); } if(i == 0){ hamDistCandidate = hamDist; candidat = i; }else{ if (hamDist < hamDistCandidate){ hamDistCandidate = hamDist; candidat = i; } } } //report result if(hamDistCandidate == 0){ printf("cable #%d", candidat); }else{ printf("cable #%d with bug\n", candidat); for(int i = 0; i < sizeof(tVec)*8; i++){ int error = cable[i] ^ crossTab[candidat][i]; if(error){ for(int j = 0; j < sizeof(tVec)*8; j++){ if(BM(j) & error){ printf("left pin %d ", i); if(cable[i] & BM(j)){ printf("connect right pin %d\n", j); }else{ printf("NO connect right pin %d\n", j); } } } } } } } кто то говорил, что программирование это не только определение последовательности действий, но и определение подходящего представления данных.
Будь ты проклят, Перри-Утконос!