diff --git a/comprun.sh b/comprun.sh index 5e1e058..a0b89e3 100755 --- a/comprun.sh +++ b/comprun.sh @@ -1,4 +1,4 @@ #!/bin/sh -gcc hello.c +gcc main.c lib/*.c ./a.out diff --git a/hello.c b/hello.c deleted file mode 100644 index 0d628a4..0000000 --- a/hello.c +++ /dev/null @@ -1,186 +0,0 @@ -#include - -float farenheitToCelsius(float farenheit) { - return (farenheit - 32.0) / 1.8; -} - -float celsiusToFarenheit(float celsius) { - return (celsius * 1.8) + 32.0; -} - -int sizeofStr(char in[]) { - int i = 0; - for (i = 0; in[i] != '\0'; ++i) - ; - return i; -} - -void printStrArray(char in[]) { - int i; - printf("{ "); - for (i = 0; i < sizeofStr(in); ++i) { - printf("%c", in[i]); - if (i == sizeofStr(in) - 1) { - printf(" }\n"); - } else { - printf(", "); - } - } -} - -void printIntArray(int in[], int inLength) { - int i; - printf("{ "); - for (i = 0; i < inLength; ++i) { - printf("%d", in[i]); - if (i == inLength - 1) { - printf(" }\n"); - } else { - printf(", "); - } - } -} - -int checkIntArraySorted(int in[], int inLength) { - int i = 0; - while(i < inLength - 1) { - if (in[i] > in[i + 1]) - return 0; - ++i; - } - - return 1; -} - -void swapInt(int *x, int *y) { - int temp = *x; - *x = *y; - *y = temp; -} - -/* Count the number of digits an integer has */ -unsigned long long intDigitCount(unsigned long long in) { - unsigned long long largestDigit; - int digitCount = 0; - for (largestDigit = 1; in / largestDigit != 0; largestDigit *= 10) - ++digitCount; - return digitCount; -} - -/* Expand an integer into an integer whose first unit is 1 followed by a leading trail of 0's*/ -unsigned long long intDigitExpand(unsigned long long in) { - int expandedDigit; - for (expandedDigit = 1; in != 1; --in) - expandedDigit *= 10; - return expandedDigit; -} - -/* Convert an integer array into a combined integer */ -int intArrayToInt(int in[], int inLength) { - int i; - int out = 0; - int currentDigit = inLength; - for (i = 1; i <= inLength; ++i) { - out += in[i - 1] * intDigitExpand(currentDigit); - --currentDigit; - } - return out; -} - -/* Split an integer into an integer array */ -void intToIntArray(int in, int out[]) { - int i; - int j = 0; - int currentDigit; - for(i = intDigitCount(in); i >= 1; --i) { - out[j] = in / intDigitExpand(i); - in -= intDigitExpand(i) * out[j]; - ++j; - } -} - -/* Pseudo Random Number Generator using the Middle-square method */ -int randIntMiddleSquare(unsigned long long *seed, int iteration) { - int i; - int oldSeedLength = intDigitCount(*seed); - for (i = 0; i < iteration; ++i) { - unsigned long long seedSquared = *seed * *seed; - unsigned long long seedSquaredLength = intDigitCount(seedSquared); - printf("Seed squared: %d\n", seedSquared); - printf("Seed squared length: %d\n", seedSquaredLength); - int seedSquaredArray[seedSquaredLength]; - int middleStart = (seedSquaredLength - oldSeedLength) / 2; - printf("Middle start: %d\n", middleStart); - int newSeedArray[oldSeedLength]; - int j; - intToIntArray(seedSquared, seedSquaredArray); - for (int j = 0; j < oldSeedLength; ++j) { - newSeedArray[j] = seedSquaredArray[middleStart]; - ++middleStart; - } - printIntArray(newSeedArray, sizeof(newSeedArray) / sizeof(int)); - unsigned long long newSeed = intArrayToInt(newSeedArray, sizeof(newSeedArray) / sizeof(int)); - int newSeedLength = intDigitCount(newSeed); - /* If the result has fewer than 2n digits, leading zeroes are added to compensate */ - if (newSeedLength < oldSeedLength) - newSeed *= intDigitExpand(oldSeedLength - newSeedLength) * 10; - *seed = newSeed; - } - - return *seed; -} - -int randIntMiddleSquareRange(int start, int end, unsigned long long *seed) { - - int endLength = intDigitCount(end); - if (endLength > intDigitCount(*seed)) - return -1; - - unsigned long long randomNumber = randIntMiddleSquare(seed, 1); - printf("The random number: %d\n", randomNumber); - int randomNumberLength = intDigitCount(randomNumber); - int randomNumberArray[randomNumberLength]; - int truncatedNumber; - int truncatedNumberArray[endLength]; - int middleStart = (randomNumberLength - endLength) / 2; - intToIntArray(randomNumber, randomNumberArray); - for (int j = 0; j < endLength; ++j) { - truncatedNumberArray[j] = randomNumberArray[middleStart]; - ++middleStart; - } - truncatedNumber = intArrayToInt(truncatedNumberArray, sizeof(truncatedNumberArray) / sizeof(int)); - - if (truncatedNumber <= end && truncatedNumber >= start) - return truncatedNumber; - else - randIntMiddleSquareRange(start, end, seed); -} - -int main() { - int unsortedArray[] = { 1, 5, 2, 1, 4, 8, 3, 2, 6, 7 }; - int sortedArray[] = { 1, 2, 4, 8, 9, 9, 9 }; - - printf("Unsorted Array : "); - printIntArray(unsortedArray, sizeof(unsortedArray) / sizeof(int)); - printf("Unsorted Array Sorted?: %d\n", checkIntArraySorted(unsortedArray, sizeof(unsortedArray) / sizeof(int))); - printf("Sorted Array : "); - printIntArray(sortedArray, sizeof(sortedArray) / sizeof(int)); - printf("Sorted Array Sorted?: %d\n", checkIntArraySorted(sortedArray, sizeof(sortedArray) / sizeof(int))); - - int number = 3372; - int intArray[4]; - - intToIntArray(number, intArray); - printIntArray(intArray, sizeof(intArray) / sizeof(int)); - - printf("Back to int %d\n", intArrayToInt(intArray, sizeof(intArray) / sizeof(int))); - - unsigned long long seed = 3791; - printf("Squared: %d\n", seed * seed); - int iteration = 1; - printf("Starting random number %d\n", seed); - printf("Random number is %d after iteration %d\n", randIntMiddleSquare(&seed, iteration), iteration); - - printf("Random: %d\n", randIntMiddleSquareRange(1, 10, &seed)); - -} diff --git a/lib/array.c b/lib/array.c new file mode 100644 index 0000000..c93dea3 --- /dev/null +++ b/lib/array.c @@ -0,0 +1,70 @@ +#include +#include "base10.h" + +int sizeofStr(char in[]) { + int i = 0; + for (i = 0; in[i] != '\0'; ++i) + ; + return i; +} + +void printStrArray(char in[]) { + int i; + printf("{ "); + for (i = 0; i < sizeofStr(in); ++i) { + printf("%c", in[i]); + if (i == sizeofStr(in) - 1) { + printf(" }\n"); + } else { + printf(", "); + } + } +} + +void printIntArray(int in[], int inLength) { + int i; + printf("{ "); + for (i = 0; i < inLength; ++i) { + printf("%d", in[i]); + if (i == inLength - 1) { + printf(" }\n"); + } else { + printf(", "); + } + } +} + +int checkIntArraySorted(int in[], int inLength) { + int i = 0; + while(i < inLength - 1) { + if (in[i] > in[i + 1]) + return 0; + ++i; + } + + return 1; +} + +/* Convert an integer array into a combined integer */ +int intArrayToInt(int in[], int inLength) { + int i; + int out = 0; + int currentDigit = inLength; + for (i = 1; i <= inLength; ++i) { + out += in[i - 1] * intDigitExpand(currentDigit); + --currentDigit; + } + return out; +} + +/* Split an integer into an integer array */ +void intToIntArray(int in, int out[]) { + int i; + int j = 0; + int currentDigit; + for(i = intDigitCount(in); i >= 1; --i) { + out[j] = in / intDigitExpand(i); + in -= intDigitExpand(i) * out[j]; + ++j; + } +} diff --git a/lib/array.h b/lib/array.h new file mode 100644 index 0000000..f08aa44 --- /dev/null +++ b/lib/array.h @@ -0,0 +1,16 @@ +#ifndef ARRAY_H +#define ARRAY_H + +int sizeofStr(char in[]); + +void printStrArray(char in[]); + +void printIntArray(int in[], int inLength); + +int checkIntArraySorted(int in[], int inLength); + +void intToIntArray(int in, int out[]); + +int intArrayToInt(int in[], int inLength); + +#endif diff --git a/lib/base10.c b/lib/base10.c new file mode 100644 index 0000000..7584937 --- /dev/null +++ b/lib/base10.c @@ -0,0 +1,16 @@ +/* Count the number of digits an integer has */ +unsigned long long intDigitCount(unsigned long long in) { + unsigned long long largestDigit; + int digitCount = 0; + for (largestDigit = 1; in / largestDigit != 0; largestDigit *= 10) + ++digitCount; + return digitCount; +} + +/* Expand an integer into an integer whose first unit is 1 followed by a leading trail of 0's*/ +unsigned long long intDigitExpand(unsigned long long in) { + int expandedDigit; + for (expandedDigit = 1; in != 1; --in) + expandedDigit *= 10; + return expandedDigit; +} diff --git a/lib/base10.h b/lib/base10.h new file mode 100644 index 0000000..cc4125d --- /dev/null +++ b/lib/base10.h @@ -0,0 +1,8 @@ +#ifndef BASE10_H +#define BASE10_H + +unsigned long long intDigitCount(unsigned long long in); + +unsigned long long intDigitExpand(unsigned long long in); + +#endif diff --git a/lib/temperature.c b/lib/temperature.c new file mode 100644 index 0000000..0afea55 --- /dev/null +++ b/lib/temperature.c @@ -0,0 +1,7 @@ +float farenheitToCelsius(float farenheit) { + return (farenheit - 32.0) / 1.8; +} + +float celsiusToFarenheit(float celsius) { + return (celsius * 1.8) + 32.0; +} diff --git a/lib/temperature.h b/lib/temperature.h new file mode 100644 index 0000000..4414682 --- /dev/null +++ b/lib/temperature.h @@ -0,0 +1,8 @@ +#ifndef TEMP_H +#define TEMP_H + +float farenheitToCelsius(float farenheit); + +float celsiusToFarenheit(float celsius); + +#endif diff --git a/main.c b/main.c new file mode 100644 index 0000000..1886753 --- /dev/null +++ b/main.c @@ -0,0 +1,28 @@ +#include +#include "lib/temperature.h" +#include "lib/array.h" +#include "lib/base10.h" + +void swapInt(int *pX, int *pY) { + int temp = *pX; + *pX = *pY; + *pY = temp; +} + + + + +int main() { + int unsortedArray[] = { 1, 5, 2, 1, 4, 8, 3, 2, 6, 7 }; + int sortedArray[] = { 1, 2, 4, 8, 9, 9, 9 }; + + printf("Unsorted Array : "); + printIntArray(unsortedArray, sizeof(unsortedArray) / sizeof(int)); + printf("Unsorted Array Sorted?: %d\n", checkIntArraySorted(unsortedArray, sizeof(unsortedArray) / sizeof(int))); + printf("Sorted Array : "); + printIntArray(sortedArray, sizeof(sortedArray) / sizeof(int)); + printf("Sorted Array Sorted?: %d\n", checkIntArraySorted(sortedArray, sizeof(sortedArray) / sizeof(int))); + + printf("40C == %dF", (int) celsiusToFarenheit(40.0)); + +}