announcements final next week (august 13 th thursday at 16:00) recitations will be held on august 12...

21
Announcements Final NEXT WEEK (August 13 th Thursday at 16:00) Recitations will be held on August 12 th Wednesday We will solve sample final questions. Homework 2 grades announced. Homework 3 is due TOMORROW. Homework 4 will be assigned tomorrow: Due: Next week August 12 th Wednesday

Upload: lucinda-banks

Post on 02-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Announcements

Final NEXT WEEK (August 13th Thursday at 16:00)Recitations will be held on August 12th Wednesday

We will solve sample final questions.

Homework 2 grades announced.

Homework 3 is due TOMORROW.

Homework 4 will be assigned tomorrow:Due: Next week August 12th Wednesday

Character Data Type (9.1) is a built-in data type to represent a single character from the

computer’s character set most commonly used standard character set is ASCII letters, digits, symbols, punctuation marks, control characters (e.g. end of

line, end of file, etc.) each character in ASCII set has a numeric code (0 .. 255)

See Table F.3 in page 763 for ASCII table

Character variables are defined using the type identifier charchar a, ch, letter;

Character literals are represented within single quotes'A' '3' '.' 'f'

Pay attention to the difference between strings with single letter and chars "A" versus 'A' first one is a string literal, second one is a character literal String variables (objects) has several private data members even if it has

a single character in it. However, char variables occupy just one byte.

Character Codes in ASCII set Each character occupies one byte

that is why character codes are between 0 and 255 first 32 characters (with codes 0 .. 31) are non-printable control

characters such as eof

blank character has the code 32 Uppercase letters are consecutive and ordered in ASCII set

code for 'A' is 65, 'B' is 66, 'C' is 67, … 'Z' is 90 Similarly, lowercase letters are also ordered and consecutive

code for 'a' is 97, … 'z' is 122 Similarly digit characters are ordered and consecutive too

code for '0' is 48, '1' is 49, … '9' is 57 Do not memorize the codes for letters and digits; you can do

character arithmetic (see next slides)

Character ArithmeticIf you compare two characters (or a character with an

integer) character codes are used in comparisonIf you apply an arithmetic operator (+ - * / %) to a

character, integer code of the character is processedthis is an implicit type casting (conversion) similar to bool

And if you process the result of such an operation as character, a reverse conversion is automatically performedyou can also process the result as integer (actually this is the

default behavior)Example: the value of 'A' + 2 is

'C' if you process as a char (you do not have to know the codes in order to reach this result)

67 if you process as integer or if you do not mean any typeExample: what is the value of 'Z' - 'A' ?

25 (you do not have to know the codes of A and Z to answer this question)

Examples Suppose digitch is a char variable and its content is a digit

character (between '0' and '9'), how can you obtain that digit character’s numeric equivalent in an int variable digitnum?

digitnum = digitch - '0';

Write a function that takes a character parameter and returns the uppercase equivalent of it if parameter is a lowercase letter. If parameter is not a lowercase letter, function returns it unchanged.

char toupper (char ch){if (ch >= 'a' && ch <= 'z') // if lowercase

return ch + ('A' - 'a'); // return its uppercasereturn ch; // otherwise return parameter unchanged

}

Escape Sequences in C++Special symbols for some characters (mostly for

control characters) to be used in character and string literals only.Not to be used while entering inputFull list is in Table 4.1 (page 103) or Table A.5 (page 716)Some escape sequences\n newline character\t tab (used for aligned output)\a bell\" double quote\' single quote\\ backslash

Example follows. What is the output?cout << "\"\\\n\"\"\n\\";

"\""\

Escape Sequences in C++ If you want to represent a nonprintable character (such as new line, bell)

in a string or character literal, you have to use nonprintable escape sequences."bla bla \n bla"'\n'

However, for printable ones, you may use escape sequences whenever needed You may or may not use escape sequence to represent a double quote

character in a char literal That means '\"' and '"' are the same

You may or may not use escape sequence to represent a single quote character in a string literal That means "bla \' bla" and "bla ' bla" are the same

However, you have to represent a double quote in a string literal as an escape sequence. Similarly, you have to represent a single quote in a char literal as an escape sequence.

To represent a backslash, you always have to use escape sequence in both char and string literals

Type CastingConversion of an expression to another type

among built-in types like double, int, char string cannot be used in type casting

syntaxtype_name (expression)

first expression is evaluated, then conversion is doneExamplescout << double (3) / 4;

output is 0.75first 3 is converted into double (3.0), then divided by 4

cout << 3 / 4;without casting, integer division, output is 0

cout << double (3 / 4);first 3 / 4 is evaluated to 0, then result is convertedoutput is 0

Type Casting Examplesreal division using two integersint a, b;double div;...div = double (a) / b;

Conversion from double to intcout << int (3.9);double value is truncatedoutput is 3

Conversion from signed to unsigned integerscout << unsigned int (-100);output is NOT 100, output is 4294967196the bit sequence to represent –100 is the same as the one of

4294967196

Type Casting ExamplesConversion from int to char

int i = 72;cout << char (i);

output is H it is the character with code 72

Complex example: what is the value of the following expression?3 + double (62 * (int ('C') - int ('A'))) / 5

2

124

124.0

24.8

27.8

Cast operators in C++

Four cast operators in C++, but only one is enoughstatic_cast <type_name> (expression)functionally not different than type_name (expression)

Examplecout << static_cast <double> (3) / 4;

output is 0.75

Easier to spot casts in the code, but causes longer code

Switch statement (Section 7.3.2)

An alternative to if-else, but much less powerful Useful when you have several choices Syntax

switch (selector_expression){ case label1: statement list; break; case label2: statement list; break;

... default : statement list;}

- First selector is evaluated

- Labels are searched. If the value of selector is listed, then execution jumps there

- All statements are executed until break

- If no label is the value of selector, statements after default are executed

Switch statement (Section 7.3.2)

Restrictionsselector expression must be integer (char, boolean ok), cannot

be real (double, float) or stringcase labels must be given in literals (constant values)

no expressionscase a*2: invalid

no ranges or listscase 1, 2, 3: invalidcase 1 .. 10: invalid

Advantagemore efficient than if-else; only one statement is executed

Disadvantagecode becomes hard to readlisting all possible values may not be convenient

Better to see in an example

Switch example

Input a digit between 0 and 9 and display its name. Display “not a digit” if not between 0 and 9.

See displaydigit.cpp

CAUTION: Do not forget break after each statement list, otherwise execution unconditionally continues until the next break or the end of the switch statement.

Three phases of creating an executable program

7.2.2, 7.2.3, 7.2.4, 7.2.53 steps

preprocessingcompilationlinking

Preprocessing The preprocessor processes all #include directives (and other

preprocessor commands – all preprocessor commands start with #) creates a translation unit which is the input of the next step (compilation) all #include’d files are pasted in the translation unit recursively

e.g. replaces #include “foo.h” with contents of file foo.h, and does this recursively, for all #includes that foo.h includes and so on

exceptions there are some preprocessor directives that causes conditional preprocessing

#ifndef _FOO_H // if _FOO_H is not defined#define _FOO_H // define it and … header file for Foo goes here // include header file#endif

if _FOO_H is not defined, then it is defined and file is included, otherwise file is not included

prevents multiple inclusion of the same header file in a program

PreprocessingWhere are the include files located?

You can ask the preprocessor to look in certain directories in order (Tools->Options->Directories...). e.g. You can add your directory after the system directories to be

automatically searched for referenced include files

You get an error if the include file is not found in these directoriesadding an include file to the project is not sufficient

Preprocessing#define identifier token

Another compiler directiveGenerally written at the beginning of program (not in a function)All instances of identifier in all functions are replaced with token

during preprocessing Token is any character sequence

Example#define LENGTH 10...cout << LENGTH << endl;

Displays 10 on screenThe above statement is compiled as

cout << 10 << endl;Because LENGTH is replaced with 10 before compilation (during

preprocessing)

CompilerThe compiler takes a translation unit as input and

produces compiled object code as outputThe object code is platform/architecture specific The source code is the same on all platforms

We may need to compile several cpp files dice.cpp, randgen.cpp, prompt.cpp, robots.cpp, …because some functions and class implementations are in those

files if you are using them in your program, you have to compile them

together with your main cpp file add to the same project

you may generate libraries out of those files ready-to-use object code need not to compile, but add the .lib file to the project

LinkerLinking combines object files and libraries to create a

single executable program (the file with .exe extension)May still create errors even if compilation is successful

unresolved external symbol ...undefined symbol ... Primary reason would be missing libraries or implementation files

(like date.cpp, prompt.cpp) header files provide the definition, but body is missing!

If you have such errors, try to find where those symbols are implemented and include those libs or cpps in your project

NextArrays and vectors (Chapter 8)

including searching and sorting (partially Chapter 11)

Recursion, scope rules, global and static variablespartially Chapter 10