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 16:30] – [Background] 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 12: | Line 12: | ||
**Helpful Resources: | **Helpful Resources: | ||
* http:// | * http:// | ||
+ | * http:// | ||
* Kernighan, Ritchie //The C Programming Language// Second Edition, AT&T Bell Laboratories, | * Kernighan, Ritchie //The C Programming Language// Second Edition, AT&T Bell Laboratories, | ||
* email consultations and guidance from Matt Haas | * email consultations and guidance from Matt Haas | ||
Line 29: | Line 30: | ||
[[haas: | [[haas: | ||
- | These mental math techniques are a product | + | This mental math technique, as well as many others, |
Line 39: | Line 40: | ||
=====Scope===== | =====Scope===== | ||
- | The motivation behind this project is to become | + | The motivation behind this project is to become |
- | + | ||
- | The specific data types explored in this project are (includes signed and unsigned): | + | |
- | * char | + | |
- | * short int | + | |
- | * int | + | |
- | * long int | + | |
- | * long long int | + | |
=====Attributes===== | =====Attributes===== | ||
State and justify the attributes you'd like to receive upon successful approval and completion of this project. | State and justify the attributes you'd like to receive upon successful approval and completion of this project. | ||
- | * ability | + | * write program |
- | * ability to convert to hexadecimal: | + | * Obtain user input with a prompt by proper implementation of pointer and use of scanf(). |
- | * ability to obtain | + | * Output both the user input value and the square of that value. |
=====Procedure===== | =====Procedure===== | ||
- | The actual steps taken to accomplish | + | 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 **// |
- | =====Code===== | + | Example 1 (My first submitted program): |
- | <code c> | + | |
- | ''/ | + | |
- | for the signed and unsigned data types in C.; | + | |
- | written by: Alana Whittier for CSCS1320S14; | + | #include < |
+ | #include < | ||
- | on February 14, 2014; | ||
- | Compile with: gcc -o datatypes datatypes.c; | + | int main() |
- | Execute with: ./datatypes | + | { |
- | */ | + | |
+ | int i; | ||
+ | int *p; | ||
+ | p=&i; | ||
+ | |||
+ | printf(" | ||
+ | scanf(" | ||
+ | if(i==15){ | ||
+ | printf(" | ||
+ | else if(i==25){ | ||
+ | printf(" | ||
+ | else if(i==35){ | ||
+ | printf(" | ||
+ | else if(i==45){ | ||
+ | printf(" | ||
+ | else if(i==55){ | ||
+ | printf(" | ||
+ | else if(i==65){ | ||
+ | printf(" | ||
+ | else if(i==75){ | ||
+ | printf(" | ||
+ | else if(i==85){ | ||
+ | printf(" | ||
+ | else if(i=95){ | ||
+ | printf(" | ||
+ | else | ||
+ | printf(" | ||
+ | |||
+ | |||
+ | |||
+ | return(0); | ||
+ | } | ||
+ | |||
+ | After more consideration, | ||
+ | |||
+ | Example 2 (The second program using modulus operator and factor): | ||
#include < | #include < | ||
+ | #include < | ||
int main() | int main() | ||
{ | { | ||
- | unsigned char uchr = 0; //unsigned char code | + | |
- | fprintf(stdout, | + | int i; |
- | fprintf(stdout, " | + | int factor, R; |
- | fprintf(stdout, | + | int *p; |
- | fprintf(stdout, | + | p=&i; |
- | uchr = uchr -1; // | + | |
- | fprintf(stdout, | + | |
- | signed char schr = 0; //signed char code | + | printf(" |
- | fprintf(stdout, | + | scanf("%d", |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | factor |
- | fprintf(stdout, | + | |
- | schr = schr -1; // | + | |
- | fprintf(stdout, | + | if(R==5) |
- | + | | |
- | unsigned short int usi = 0; //unsigned short int code | + | if(i>95) |
- | fprintf(stdout, | + | printf("Error: Invalid Entry"); |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | usi = usi -1; // | + | |
- | fprintf(stdout, | + | |
- | + | ||
- | signed short int ssi = 0; //signed short int code | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, "low: %hd, ", (ssi | -0X8000); //returns low value for signed short int (need to type cast AND change to bitwise OR) | + | |
- | fprintf(stdout, | + | |
- | ssi = ssi -1; // | + | |
- | 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, "TYPE: %18s, ", " | + | |
- | 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, | + | |
- | fprintf(stdout, | + | |
- | uli = uli -1; // | + | |
- | fprintf(stdout, | + | |
- | + | ||
- | signed long int sli = 0; //signed long int code | + | |
- | | + | |
- | | + | |
- | fprintf(stdout, | + | |
- | fprintf(stdout, | + | |
- | sli = sli -1; // | + | |
- | 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); | ||
+ | } | ||
+ | |||
+ | |||
+ | =====Code===== | ||
+ | <code c> | ||
+ | /*Squares.c - A program which implements a mental math; | ||
+ | technique for computing the square of any; | ||
+ | two digit integer ending in 5, given by | ||
+ | user input; | ||
+ | | ||
+ | Written by: Alana Whittier for CSCS1320S14 on February 26, 2014; | ||
- | =====Execution===== | + | Compile with: gcc- - squares squares.c; |
+ | Execute with: ./squares | ||
+ | */ | ||
- | <cli> | + | # |
- | lab46: | + | #include <stdlib.h> |
- | lab46: | + | |
- | lab46: | + | |
- | TYPE: unsigned char, bytes: 1, low: 0, high: 255, qty: 256 | + | |
- | TYPE: | + | |
- | TYPE: unsigned short int, bytes: 2, low: 0, high: 65535, qty: 0 | + | |
- | TYPE: | + | |
- | TYPE: unsigned int, bytes: 4, low: 0, high: 4294967295, qty: 0 | + | |
- | TYPE: | + | |
- | TYPE: unsigned long int, bytes: 8, low: 0, high: 18446744073709551615, | + | |
- | TYPE: | + | |
- | TYPE: unsigned long long int, bytes: 8, low: 0, high: 18446744073709551615, | + | |
- | TYPE: | + | |
- | </cli> | + | |
- | =====Reflection===== | ||
- | Considering the difficulties I encountered during the process of writing this program, it was as rewarding as it was frustrating. It forced me to delve deeper into more of the computer fundamentals to successfully execute the program. Since I have never taken a digital logic type course and this was my first programming course, binary was a foreign concept to me. Furthermore, | ||
- | **Observations** | + | int main() |
+ | { | ||
+ | |||
+ | int i; | ||
+ | int *p; | ||
+ | p=&i; | ||
- | 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("type up to a two digit integer ending in 5;\n"); |
+ | scanf(" | ||
+ | if(i==15){ | ||
+ | printf(" | ||
+ | else if(i==25){ | ||
+ | printf(" | ||
+ | else if(i==35){ | ||
+ | printf(" | ||
+ | else if(i==45){ | ||
+ | printf(" | ||
+ | else if(i==55){ | ||
+ | printf(" | ||
+ | else if(i==65){ | ||
+ | printf(" | ||
+ | else if(i==75){ | ||
+ | printf(" | ||
+ | else if(i==85){ | ||
+ | printf(" | ||
+ | else if(i=95){ | ||
+ | printf(" | ||
+ | else | ||
+ | printf(" | ||
- | 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. | + | return(0); |
+ | } | ||
+ | |||
+ | =====Execution===== | ||
- | The difference between %u and %d are that %u denotes an unsigned int type, while %d denotes | + | < |
+ | lab46: | ||
+ | lab46: | ||
+ | lab46: | ||
+ | type up to a two digit integer ending in 5; | ||
+ | 25 | ||
+ | 25: 625 | ||
+ | lab46: | ||
+ | type up to a two digit integer ending in 5; | ||
+ | 55 | ||
+ | 55: 3025 | ||
+ | lab46: | ||
+ | type up to a two digit integer ending in 5; | ||
+ | 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: | ||
- | 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, it is assumed unsigned by default. | + | =====Reflection===== |
+ | In writing this program, I encountered some initial difficulty with the use of if, else if, and else statements. I was not understanding why the program was not doing as I expected. After a series of trial and error attempts, it was observed that my code would work if I used the correct syntax. First mistake: the semi-colon following the if, else if, else conditions that I tried to impose. Removing them helped significantly. | ||
+ | Second mistake: The way I used the curly braces. Essentially, | ||
+ | |||
+ | 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 & 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 217: | 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 |