This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
user:acrowle1:portfolio:cprogproject3 [2014/03/02 17:41] – [Procedure] acrowle1 | user:acrowle1:portfolio:cprogproject3 [2014/03/09 14:53] (current) – [Project: dayofweek] acrowle1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ======Project: | + | ======Project: |
A project for CSCS1320S14 by Alana Whittier during the Spring Semester 2014. | A project for CSCS1320S14 by Alana Whittier during the Spring Semester 2014. | ||
Line 50: | Line 50: | ||
My first attempt at writing the program was using the modulus operator, %, although abandoned that effort quickly as it was not clear what to do with the factor in order to implement the mental math technique. I then decided to implement the computation of the square in what I deemed more simplistic of an approach and then used a series of if, else if statements to output **// | My first attempt at writing the program was using the modulus operator, %, although abandoned that effort quickly as it was not clear what to do with the factor in order to implement the mental math technique. I then decided to implement the computation of the square in what I deemed more simplistic of an approach and then used a series of if, else if statements to output **// | ||
- | Example 1: | + | Example 1 (My first submitted program): |
Line 94: | Line 94: | ||
After more consideration, | After more consideration, | ||
- | See the code below. | + | Example 2 (The second program using modulus operator and factor): |
Line 128: | Line 128: | ||
=====Code===== | =====Code===== | ||
<code c> | <code c> | ||
- | '' | + | /*Squares.c - A program which implements a mental math; |
- | for the signed and unsigned data types in C.; | + | |
+ | two digit integer ending | ||
+ | user input; | ||
+ | |||
+ | Written by: Alana Whittier for CSCS1320S14 on February 26, 2014; | ||
- | + | Compile with: gcc- - squares squares.c; | |
- | written by: Alana Whittier for CSCS1320S14; | + | Execute with: ./squares |
- | + | ||
- | on February 14, 2014; | + | |
- | + | ||
- | Compile with: gcc -o datatypes datatypes.c; | + | |
- | Execute with: ./datatypes | + | |
*/ | */ | ||
#include < | #include < | ||
+ | #include < | ||
+ | |||
int main() | int main() | ||
{ | { | ||
- | unsigned char uchr = 0; //unsigned char code | + | |
- | fprintf(stdout, | + | int i; |
- | fprintf(stdout, | + | int *p; |
- | fprintf(stdout, | + | p=&i; |
- | fprintf(stdout, | + | |
- | uchr = uchr -1; // | + | |
- | fprintf(stdout, | + | |
- | signed char schr = 0; //signed char code | + | printf("type up to a two digit integer ending in 5;\n"); |
- | fprintf(stdout, | + | scanf("%d", |
- | fprintf(stdout, | + | if(i==15){ |
- | fprintf(stdout, "low: %hhd, ", (schr | -0X80)); //returns low value for signed char (need to type cast AND change to bitwise OR) | + | |
- | fprintf(stdout, | + | else if(i==25){ |
- | schr = schr -1; // | + | |
- | fprintf(stdout, | + | else if(i==35){ |
- | + | | |
- | unsigned short int usi = 0; //unsigned short int code | + | else if(i==45){ |
- | fprintf(stdout, | + | |
- | fprintf(stdout, " | + | else if(i==55){ |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | else if(i==65){ |
- | usi = usi -1; // | + | |
- | fprintf(stdout, | + | else if(i==75){ |
- | + | | |
- | signed short int ssi = 0; //signed short int code | + | else if(i==85){ |
- | | + | |
- | fprintf(stdout, | + | else if(i=95){ |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | else |
- | ssi = ssi -1; //decrement | + | printf("Error: Invalid Entry\n"); |
- | fprintf(stdout, | + | |
- | + | ||
- | unsigned int ui = 0; //unsigned int code | + | |
- | fprintf(stdout, | + | |
- | | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | ui = ui -1; // | + | |
- | fprintf(stdout, | + | |
- | + | ||
- | signed int si = 0; //signed int code | + | |
- | fprintf(stdout, | + | |
- | | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | si = si -1; | + | |
- | fprintf(stdout, | + | |
- | + | ||
- | unsigned long int uli = 0; //unsigned long int code | + | |
- | fprintf(stdout, | + | |
- | | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | uli = uli -1; // | + | |
- | fprintf(stdout, | + | |
- | + | ||
- | signed long int sli = 0; //signed long int code | + | |
- | | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | sli = sli -1; //decrement | + | |
- | fprintf(stdout, | + | |
- | unsigned long long int ulli = 0; //unsigned long long int code | ||
- | fprintf(stdout, | ||
- | fprintf(stdout, | ||
- | fprintf(stdout, | ||
- | fprintf(stdout, | ||
- | ulli = ulli -1; //decrement | ||
- | fprintf(stdout, | ||
- | | ||
- | signed long long int slli = 0; //signed long long int code | ||
- | fprintf(stdout, | ||
- | fprintf(stdout, | ||
- | fprintf(stdout, | ||
- | fprintf(stdout, | ||
- | slli = slli -1; //decrement | ||
- | fprintf(stdout, | ||
- | |||
- | } | ||
+ | return(0); | ||
+ | } | ||
+ | |||
=====Execution===== | =====Execution===== | ||
<cli> | <cli> | ||
- | lab46: | + | lab46: |
- | lab46: | + | lab46: |
- | lab46: | + | lab46: |
- | TYPE: unsigned char, bytes: 1, low: 0, high: 255, qty: 256 | + | type up to a two digit integer ending in 5; |
- | TYPE: signed char, bytes: 1, low: -128, high: 127, qty: 256 | + | 25 |
- | TYPE: unsigned short int, bytes: 2, low: 0, high: 65535, qty: 0 | + | 25: 625 |
- | TYPE: | + | lab46:~/ |
- | TYPE: unsigned int, bytes: 4, low: 0, high: 4294967295, qty: 0 | + | type up to a two digit integer ending in 5; |
- | TYPE: signed int, bytes: 4, low: -2147483648, | + | 55 |
- | TYPE: unsigned long int, bytes: 8, low: 0, high: 18446744073709551615, | + | 55: 3025 |
- | TYPE: signed long int, bytes: 8, low: -9223372036854775808, | + | lab46:~/ |
- | TYPE: unsigned long long int, bytes: 8, low: 0, high: 18446744073709551615, | + | type up to a two digit integer ending in 5; |
- | TYPE: | + | 60 |
+ | Error: Invalid Entry | ||
+ | lab46:~/ | ||
+ | type up to a two digit integer ending in 5; | ||
+ | 95 | ||
+ | 95: 9025 | ||
+ | lab46:~/ | ||
+ | type up to a two digit integer ending in 5; | ||
+ | 100 | ||
+ | Error: Invalid Entry | ||
+ | lab46:~/ | ||
</ | </ | ||
=====Reflection===== | =====Reflection===== | ||
- | Considering the difficulties | + | In writing this program, |
+ | Second mistake: The way I used the curly braces. Essentially, I was embedding several else if statements within | ||
- | **Observations** | + | Since my initial attempt at writing this program included the modulus operator, which had been quickly abandoned, I decided to revisit that since I now had a working program written in a manner I felt was more simplistic. What I realized that I was missing from my initial program was the factor (the number of times that 10 went into the integer). For example, if I declared the factor to be i/10 and R= i%10, then for an integer value of 25, R=5 and the factor=2, since 10 can go into 25 twice, with a remainder of 5. With this program written this way, the same mental math technique works for 3 and 4 digit integers ending in 5 as well, to compute the squares. This code is shown above in Example 2 of the Procedure section. |
- | The long and long long int (signed and unsigned) appear the same. This is because they are both 64 bit and that is the most the compiler can handle. | ||
- | printf() and fprintf() basically do the same thing. The difference being that printf can only print on the monitor, has the default stream of STDOUT, while fprintf can print to a user defined stream (or file). In our project, fprintf uses the STDOUT to the screen AS if it were a file. | ||
- | STDOUT is by default printed to the screen unless user specified. | ||
- | %s is the format specifier used to print a string of characters, %hhu is the format specifier for half half unsigned char, % hu is the format specifier for unsigned short int. | ||
- | |||
- | The difference between %u and %d are that %u denotes an unsigned int type, while %d denotes a signed int type. | ||
- | |||
- | Considering the 13 in %13 in the first stanza for unsigned char in the program, this just specifies the number of characters in the string, including spaces to be printed for " | ||
- | |||
- | If a sign is left unspecified, | ||
- | |||
- | The & and | operators are the bitwise logic operators, which in our case took the hex representation of our data types to help us to obtain the appropriate high/low values within our ranges. | ||
- | |||
- | I experienced some difficulty in initial attempts to obtain the low values for the signed data types. I later learned that not only did I need to change the expression for the " | ||
- | |||
- | Based on my program' | ||
- | * signed char = 8 bits | ||
- | * unsigned short int = 16 bits | ||
- | * unsigned int = 32 bits | ||
- | * signed int = 32 bits | ||
- | * signed long long int = 64 bits | ||
- | |||
- | However, due to the decrementing and incrementing per data type, only the unsigned char actually stored ANY memory at all and stored a total of 16 bits! | ||
Line 287: | Line 227: | ||
In performing this project, the following resources were referenced: | In performing this project, the following resources were referenced: | ||
- | * http://en.cppreference.com/w/cpp/language/types1 | + | * http://wildaboutmath.com/2007/11/11/impress-your-friends-with-mental-math-tricks/comment-page-6/ |
- | * http://www.youtube.com/ | + | * http://saurabhg.hubpages.com/hub/ |
- | * http://www.binaryhexconverter.com/decimal-to-hex-converter | + | * Kernighan, Ritchie |
- | * http://en.wikipedia.org/wiki/Signed_number_representations | + | * email consultations and guidance from Matt Haas |