From a3f4c78465de32c23b265761a8b7dedc56296526 Mon Sep 17 00:00:00 2001 From: Johannes Theiner Date: Mon, 9 Apr 2018 21:18:33 +0200 Subject: [PATCH] gosh dammit --- 02_MENT/main_02_MENT.cpp | 163 ++++++++++++++++++++------------------- 1 file changed, 83 insertions(+), 80 deletions(-) diff --git a/02_MENT/main_02_MENT.cpp b/02_MENT/main_02_MENT.cpp index e444cf5..20b1e73 100644 --- a/02_MENT/main_02_MENT.cpp +++ b/02_MENT/main_02_MENT.cpp @@ -5,29 +5,29 @@ #include "../helpers/println.hpp" -struct PascalString{ - int length; // number of chars used - char characters[256]; // chars of some character string +struct PascalString { + int length; // number of chars used + char characters[256]; // chars of some character string }; char cStringArea[1024]; int hexDigitToInt(char hexDigit) { -int value = 0; + int value = 0; -if(hexDigit > 47 && hexDigit < 58) - value = hexDigit - 48; + if (hexDigit > 47 && hexDigit < 58) + value = hexDigit - 48; -if(hexDigit > 96 && hexDigit < 103) - value = hexDigit - 97 + 10; + if (hexDigit > 96 && hexDigit < 103) + value = hexDigit - 97 + 10; -return value; + return value; } int hexStringToInt(PascalString binaryDigits) { int returnValue = 0; - for(int i = 0; i <= binaryDigits.length; ++i) { + for (int i = 0; i <= binaryDigits.length; ++i) { returnValue += binaryDigits.characters[i]; } @@ -35,17 +35,17 @@ int hexStringToInt(PascalString binaryDigits) { } void printPascalString(PascalString s) { - for(int i = 0; i <= s.length; i++) { + for (int i = 0; i <= s.length; i++) { print(s.characters[i]); } println(""); } PascalString intToDual(int n) { - + int i = std::to_string(n).length() * 4; PascalString string = {i}; - while(n >= 1) { + while (n >= 1) { string.characters[i] = (n % 2) + '0'; n = n / 2; i--; @@ -54,24 +54,30 @@ PascalString intToDual(int n) { } char intToHexChar(int n) { - if(n > 9) { - switch(n) { - case 10: return 'A'; - case 11: return 'B'; - case 12: return 'C'; - case 13: return 'D'; - case 14: return 'E'; - case 15: return 'F'; - default: return 'X'; + if (n > 9) { + switch (n) { + case 10: + return 'A'; + case 11: + return 'B'; + case 12: + return 'C'; + case 13: + return 'D'; + case 14: + return 'E'; + case 15: + return 'F'; + default: + return 'X'; } - } - else return n + '0'; + } else return n + '0'; } PascalString intToHex(int n) { int i = std::to_string(n).length(); PascalString string = {i}; - while(n >= 1) { + while (n >= 1) { string.characters[i] = intToHexChar(n % 16); n = n / 16; i--; @@ -81,24 +87,21 @@ PascalString intToHex(int n) { } PascalString bitwiseDualAnd(PascalString a, PascalString b) { - PascalString shortString = a.length < b.length ? a : b; - PascalString longString = a.length > b.length ? a : b; - PascalString result = {longString.length, '0'}; - - for(int i = longString.length; i >= 0; --i) { - if(shortString.length < i) result.characters[i] = longString.characters[i]; - result.characters[i] = longString.characters[i] & shortString.characters[i]; + PascalString result = {a.length, '0'}; + + for (int i = b.length; i >= 0; --i) { + if (a.length < i) result.characters[i] = a.characters[i]; + result.characters[i] = a.characters[i] & b.characters[i]; } - + return result; } PascalString bitwiseHexAnd(PascalString a, PascalString b) { PascalString result = {a.length, '0'}; - for(int i = b.length; i >= 0; --i) { - if(a.length < i) result.characters[i] = a.characters[i]; - println("i: ", i, " ", a.characters[i] & b.characters[i]); + for (int i = b.length; i >= 0; --i) { + if (a.length < i) result.characters[i] = a.characters[i]; result.characters[i] = a.characters[i] & b.characters[i]; } @@ -110,53 +113,53 @@ int to_c_string(PascalString s) { } void line() { -println("==================================="); + println("==================================="); } -int main(int argc, char** argv, char** envp) { +int main(int argc, char **argv, char **envp) { - PascalString s = {3, '1', '0', '0'}; - PascalString s2 = {4, 'f', 'f', 'f', 'f'}; - println(hexStringToInt(s)); - line(); - println(hexStringToInt(s2)); - line(); - println(hexDigitToInt('d')); - line(); - println(hexDigitToInt('9')); - line(); - println(hexDigitToInt('2')); - - printPascalString(s2); - line(); - - int controlRegister = 128; - controlRegister |= 64+32; - controlRegister ^=16; - controlRegister &= 128+64; - controlRegister <<= 1; - - println(controlRegister); - line(); - println(intToHexChar(6)); - line(); - println(intToHexChar(10)); - line(); - printPascalString(intToDual(4106)); - line(); - printPascalString(intToHex(965)); - line(); - printPascalString(intToHex(1956)); + PascalString s = {3, '1', '0', '0'}; + PascalString s2 = {4, 'f', 'f', 'f', 'f'}; + println(hexStringToInt(s)); + line(); + println(hexStringToInt(s2)); + line(); + println(hexDigitToInt('d')); + line(); + println(hexDigitToInt('9')); + line(); + println(hexDigitToInt('2')); - line(); - printPascalString(bitwiseDualAnd({3, '1', '1', '0'}, {4, '1', '1', '1', '0'})); - line(); - printPascalString(bitwiseDualAnd({3, '1', '1', '1'}, {4, '1', '1', '1', '0'})); - line(); - printPascalString(bitwiseDualAnd({3, '1', '1', '0'}, {4, '1', '1', '1', '1'})); - line(); - printPascalString(bitwiseDualAnd({3, '0', '1', '0'}, {4, '1', '0', '1', '1'})); - - return 0; + printPascalString(s2); + line(); + + int controlRegister = 128; + controlRegister |= 64 + 32; + controlRegister ^= 16; + controlRegister &= 128 + 64; + controlRegister <<= 1; + + println(controlRegister); + line(); + println(intToHexChar(6)); + line(); + println(intToHexChar(10)); + line(); + printPascalString(intToDual(4106)); + line(); + printPascalString(intToHex(965)); + line(); + printPascalString(intToHex(1956)); + + line(); + printPascalString(bitwiseDualAnd({3, '1', '1', '0'}, {4, '1', '1', '1', '0'})); + line(); + printPascalString(bitwiseDualAnd({3, '1', '1', '1'}, {4, '1', '1', '1', '0'})); + line(); + printPascalString(bitwiseDualAnd({3, '1', '1', '0'}, {4, '1', '1', '1', '1'})); + line(); + printPascalString(bitwiseDualAnd({3, '0', '1', '0'}, {4, '1', '0', '1', '1'})); + + return 0; }