1 epsii 59:006 spring 2004. 2 exam dates 3 homework grading in general, programs that do not compile...

37
1 EPSII 59:006 Spring 2004

Upload: brett-perry

Post on 12-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

1

EPSII

59:006

Spring 2004

Page 2: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

2

Exam Dates

Page 3: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

3

Homework Grading In general, programs that do not compile and run

will be given no more than 25% credit Points will be deducted for the following:

serious compiler warnings poor style—i.e. lack of indentations to delineate

blocks lack of comments poor program design—i.e. confusing logic, non-

meaningful variable names, etc. lack of sufficient input-checking

Page 4: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

4

% man gccNAME gcc, g++ - GNU project C and C++ Compiler (gcc-2.95)

SYNOPSIS gcc [ option | filename ]... g++ [ option | filename ]...

WARNING The information in this man page is an extract from the full documentation of the GNU C compiler, and is limited to the meaning of the options.

This man page is not kept up to date except when volunteers want to maintain it. If you find a discrepancy between the man page and the software, please check the Info file, which is the authoritative documentation.

If we find that the things in this man page that are out of date cause significant confusion or complaints, we will stop distributing the man page. The alternative, updating the man page when we update the Info file, is impossible because the rest of the work of maintaining GNU CC leaves us no time for that. The GNU project regards man pages as obsolete and should not let them take time away from other things.

For complete and current documentation, refer to the Info file `gcc' or the manual Using and Porting GNU CC (for version 2.0). Both are made from the Texinfo source file gcc.texinfo.

Page 5: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

5

Important gcc optionsgcc -Wall <input file name>

- prints warnings when you compile

gcc -o <executable file name> <input file name>- renames executable file (to avoid ‘a.out’)

So, to avoid problems, always invoke gcc asgcc –Wall –o <exec file name> <in file name>

Page 6: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

6

Logical Operators && ( logical AND )

Returns true if both conditions are true || ( logical OR )

Returns true if either of its conditions are true ! ( logical NOT, logical negation )

Reverses the truth/falsity of its condition Unary operator, has one operand

Useful as conditions in loops

Expression Result

true && false falsetrue || false true

!false true

Page 7: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

7

Logical Operators

A B A && B

0 0 0

0 1 0

1 0 0

1 1 1

A B A || B

0 0 0

0 1 1

1 0 1

1 1 1

Page 8: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

8

Examples

(1 && 1) = 1 (0 && 1) = 0 (1 || (1 && 0)) = 1 (0 || (1 && 1)) = 1 ((1 && 1) || 0) = 1

Page 9: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

9

Confusing Equality (==) and Assignment (=) Operators Dangerous error

Does not ordinarily cause syntax errors Any expression that produces a value can be used in control

structures Nonzero values are true, zero values are false Example using ==:

if ( payCode == 4 )

printf( "You get a bonus!\n" ); Checks paycode, if it is 4 then a bonus is awarded

Page 10: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

10

Confusing Equality (==) and Assignment (=) Operators

Example, replacing == with =:if ( payCode = 4 )

printf( "You get a bonus!\n" ); This sets paycode to 4 4 is nonzero, so expression is true, and bonus

awarded no matter what the paycode was

Logic error, not a syntax error

Page 11: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

11

Confusing Equality (==) and Assignment (=) Operators lvalues

Expressions that can appear on the left side of an equation Their values can be changed, such as variable names

x = 4; rvalues

Expressions that can only appear on the right side of an equation Constants, such as numbers

Cannot write 4 = x; Must write x = 4;

lvalues can be used as rvalues, but not vice versa y = x;

Page 12: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

12

Structured-Programming Summary Structured programming

Easier than unstructured programs to understand, test, debug and modify

Rules for structured programming Rules developed by programming community Only single-entry/single-exit control structures are used Rules:

1. Begin with the highest level description of the solution –ie. the “simplest flowchart “

2. Any rectangle (action) can be replaced by two rectangles (actions) in sequence

3. Any rectangle (action) can be replaced by any control structure (sequence, if, if/else, switch, while, do/while or for)

4. Rules 2 and 3 can be applied in any order and multiple times

 

 

Page 13: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

13

Structured-Programming Summary

.

.

.

Rule 2 Rule 2 Rule 2

Rule 1 - Begin with the simplest flowchart (or pseudocode)

Rule 2 - Any rectangle can be replaced by two rectangles in sequence

Page 14: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

14

Structured-Programming Summary

Rule 3

Rule 3

Rule 3

Rule 3 - Replace any rectangle with a control structure (selection or repetition)

Page 15: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

15

Structured-Programming Summary All programs can be broken down into 3 controls

Sequence – unconditional set of actions Selection – if, if/else or switch Repetition – while, do/while or for

Can only be combined in two ways Nesting (rule 3) Stacking (rule 2)

Any selection can be rewritten as an if statement, and any repetition can be rewritten as a while statement

Page 16: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

16

Structured Programming Example

Develop a program that prints the Roman Numeral equivalent of numbers typed from the keyboard (numbers must be in the range of 1-3999). The program should be terminated by typing a sentinel value of -1

Example Output: Enter a number between 1 and 3999 (-1 to exit): 47The roman numeral equivalent of 47 is: XLVIIEnter a number between 1 and 3999 (-1 to exit): 12The roman numeral equivalent of 12 is: XIIEnter a number between 1 and 3999 (-1 to exit): -1Goodbye!!%

Page 17: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

17

How Do We Approach the Problem? Use stepwise refinement to develop a

structured algorithm in pseudocode Convert pseudocode into a C program Debug, test, and refine the program

Page 18: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

18

Top-level algortithm Initial Algorithm:

Input integer values in the range 1-3999 from the from the keyboard and convert each number to its roman numeral value until a sentinal value of -1 is entered.

First refinement: Input a valid integer value (or termination condition) from the

keyboard: Repeat the following steps until the termination condition is

satisfied: A: Display the Roman Numeral equivalent of the entered number B: Input the next valid integer value (or termination condition) from

the keyboard.

Page 19: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

19

Further refinement of Steps:

Refinement of Step A: How do we figure out the roman numeral equivalent of a

number? On possible approach is table lookup—i.e. create a table showing

the roman numeral equivalent for each integer Table would be very large (4000 entries) Would have to create the entries by hand (tedious) Not scalable—what if we wanted to expand our program to handle

values in the range of 1-1,000,000? So we need to come up with a conversion process

Do a little research to be sure that we understand how roman numeral representation works.

Play with some examples Figure out a conversion scheme that can be expressed as an algorithm

Page 20: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

20

Roman Numeral Representation

Digits: I represents 1 V represents 5 X represents 10 L represents 50 C represents 100 D represents 500 M represents 1000

Representation of integers 1-9: I represents 1 II represents 2 III represents 3 IV represents 4 V represents 5 VI represents 6 VII represents 7 VIII represents 8 IX represents 9

Page 21: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

21

More about Roman Numeral Representation X represents 10 XX represents 20 XXX represents 30 XL represents 40 L represents 50 LX represents 60 LXX represents 70 LXXX represents 80 XC represents 90

C represents 100 CC represents 200 CCC represents 300 CD represents 400 D represents 500 DC represents 600 DCC represents 700 DCCC represents 800 CM represents 900

Page 22: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

22

Digit-by-digit conversion of decimal number to roman numerals:

748

DCC XL VIII

2409

MM CD IX

Page 23: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

23

Refinement of Step A based upon Digit-by Digit Conversion Step A:

Display the roman numeral equivalent for the digit in the “thousands position”

Display the roman numeral equivalent for the digit in the “hundreds position”

Display the roman numeral equivalent for the digit in the “tens position”

Display the roman numeral equivalent for the digit in the “ones position”

Page 24: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

24

Further refinement: Original Step: Display the roman numeral

equivalent for the digit in the “thousands position”

Refinement: Determine the value of the “thousands position” digit Based upon the value of this digit display the

following: 0 => <nothing> 1 => M 2 => MM 3 => MMM

Page 25: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

25

Further refinement

Original Step: Determine the value of the the “thousands position” digit

Refinement: Determine the value of the thousands position

digit by dividing the input number by 1000 (integer division)

Page 26: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

26

Stepwise Refinement Continued: Original Step: Display the Roman Number equivalent for

the digit in the “hundreds position” Refinement:

Determine the value of the “hundreds position” digit Based upon the value of this digit, display the following:

0 => <nothing> 1 => C 2 => CC 3 => CCC 4 => CD 5 => D 6 => DC 7 => DCC 8 => DCCC 9 => CM

Page 27: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

27

Further refinement Original step—Determine the value of the

“hundreds position” digit Refinement:

Compute the value of the “hundreds position” digit as follows :

compute the modulus resulting from division of the input number by 1000

dividing the modulus by 100 (integer division)

e.g. (3467 % 1000)/100) == 4

Page 28: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

28

Stepwise Refinement Continued: Original Step: Display the Roman Number equivalent for

the digit in the “tens position” Refinement:

Determine the value of the “tens position” digit Based upon the value of this digit, display the following:

0 => <nothing> 1 => X 2 => XX 3 => XXX 4 => XL 5 => L 6 => LX 7 => LXX 8 => LXXX 9 => XC

Page 29: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

29

Further refinement Original step—Determine the value of the “tens

position” digit Refinement:

Compute the value of the “tens position” digit as follows :

compute the modulus resulting from division of the input number by 100

divide the modulus by 10 (integer division)

e.g. (3467 % 100)/10) == 6

Page 30: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

30

Stepwise Refinement Continued: Original Step: Display the Roman Number equivalent for

the digit in the “ones position” Refinement:

Determine the value of the “ones position” digit Based upon the value of this digit, display the following:

0 => <nothing> 1 => I 2 => II 3 => III 4 => IV 5 => V 6 => VI 7 => VII 8 => VIII 9 => IX

Page 31: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

31

Further refinement Original step—Determine the value of the “ones

position” digit Refinement:

Compute the value of the “ones position” digit as follows :

compute the modulus resulting from division of the input number by 10

e.g. (3467 % 10) == 7

Page 32: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

32

/* Terry Braun 2/8/2004

convert decimal numbers to roman numerals input is 1-3999 exit on -1

*/

main() {int num = 1; // number entered by userint done = 0; // done when done = one

// place holder valuesint thousand=0;int hundred = 0;int ten=0;int one=0;while(!done) { printf("Enter a number between 1 and 3999(-1 to exit):"); scanf("%d",&num); if((num >= 1)&&(num<=3999)) { //valid input

thousand = num / 1000; // determine value of 1000 digit hundred = ((num % 1000)/100); ten = ((num % 100)/10); one = ((num % 10)/1);

// For DEBUGGING //printf("%d %d %d %d\n",thousand,hundred,ten,one);

Page 33: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

33

/****** generate thouands Roman numeral(s) ******/ if(thousand == 1) { printf("M"); } else if(thousand == 2) { printf("MM"); } else if(thousand == 3) { printf("MMMM"); } else if(thousand == 0) { // do nothing } else { // Note -- this condition should never execute printf("Unexpected thousand value = %d -- exiting\n",thousand); exit(1); // Unless there is a logic error }

Page 34: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

34

/****** generate hundreds Roman numeral(s) ******/ if(hundred == 1) { printf("C"); } else if(hundred == 2) { printf("CC"); } else if(hundred == 3) { printf("CCC"); } else if(hundred == 4) { printf("CD"); } else if(hundred == 5) { printf("D"); } else if(hundred == 6) { printf("DC"); } else if(hundred == 7) { printf("DCC"); } else if(hundred == 8) { printf("DCCC"); } else if(hundred == 9) { printf("CM"); } else if(hundred == 0) { // do nothing } else { printf("Unexpected hundred value = %d -- exiting\n",hundred); exit(1); }

Page 35: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

35

/****** generate tens Roman numeral(s) ******/ if(ten == 1){ printf("X"); } else if(ten == 2){ printf("XX"); } else if(ten == 3){ printf("XXX"); } else if(ten == 4){ printf("XL"); } else if(ten == 5){ printf("L"); } else if(ten == 6){ printf("LX"); } else if(ten == 7){ printf("LXX"); } else if(ten == 8){ printf("LXXX"); } else if(ten == 9){ printf("XC"); } else if(ten == 0){ // do nothing }else { printf("Unexpected tens value = %d -- exiting\n",ten); exit(1); }

Page 36: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

36

/****** generate ones Roman numeral(s) ******/ if(one == 1){ printf("I"); } else if(one == 2){ printf("II"); } else if(one == 3){ printf("III"); } else if(one == 4){ printf("IV"); } else if(one == 5){ printf("V"); } else if(one == 6){ printf("VI"); } else if(one == 7){ printf("VII"); } else if(one == 8){ printf("VIII"); } else if(one == 9){ printf("IX"); } else if(one == 0) { // do nothing }else { printf("Unexpected ones value = %d -- exiting\n",one); exit(1); }

Page 37: 1 EPSII 59:006 Spring 2004. 2 Exam Dates 3 Homework Grading In general, programs that do not compile and run will be given no more than 25% credit Points

37

printf("\n"); } // end of valid input

else if(num == -1) { done = 1; // we are done } else { printf("Invalid input, please try again\n"); } } // end while

} // end main