440 likes | 618 Views
2. Programming Fundamentals. anatomy of a program: comments, include directives, main(), i/o, statements. data object ( variable ) data types , expressions : arithmetic and Boolean statements Input/Output: C++ streams. begin / end of function body. Line comment: text after //
E N D
2. Programming Fundamentals • anatomy of a program: comments, include directives, main(), i/o, statements. • data object (variable) • data types, • expressions: arithmetic and Boolean • statements • Input/Output: C++ streams MET CS 563--Fall 2008 2. Programming Fundamentals
begin / end of function body Line comment: text after // till end of line ignored by compiler 2.1. Anatomy of a Program – Listing L2-1-hello.cpp // Listing L2-1-hello.cpp // prints “Hello C++ fans!” # include <iostream>using namespace std;int main(){ std::cout << "Hello C++ fans"; std::cout << "!\n"; return 0;} preprocessing directive: instructs compiler to include file named within the < > as part of the source; iostreamis i/o stream header file in namespace std main() function always executed first statement: line of code ending with semicolon; here character string "Hello C++ fans" is inserted in output stream cout "connected" to the screen escape character: backslash followed by character , representing special characters, e.g. “\n” for newline statement to exit function “returning” 0 for successful completion MET CS 563--Fall 2008 2. Programming Fundamentals
Listing L2-2-distance // L2-2-distance.cpp //computes distance traveled with a given speed and time // starting from some initial position #include <iostream> using namespace std; int main() { double speed, time, total; int initial = 5;//initial position cout << "Enter speed\n"; cin >> speed; cout << "Enter time\n"; cin >> time; total = initial + speed*time; cout << "The total distance is "<< total << endl; return 0; } data object: place in memory of certain size accessible by name declaration of data object: specifies name and size (type) initialization of data object: specifies value standard input stream cin: takes input from keyboard assignment statement:expression right hand side of assignment operator =is stored in data object specified on left hand side MET CS 563--Fall 2008 2. Programming Fundamentals
Data Object (Variable): place in memory characterized by type int float name initial speed value 5 10.2 address examples will be given later • name: a means to access/refer to the object in memory • type: determination of the size allotted to the object in memory and the way to interpret its memory bits • value: memory bits of object interpreted according to type • address: location in main memory where object stored MET CS 563--Fall 2008 2. Programming Fundamentals
Identifiers Not all strings of symbols can be used as names of objects. Valid object names are called identifiers and must satisfy the following rules: • Contain only letters from the alphabet (upper or lower case: A,B, …Z,a,b,…,z ), digits (0, 1,…, 9) or underscore (_); • Start with a character or underscore. MET CS 563--Fall 2008 2. Programming Fundamentals
Valid or not? Why? sum abc AnneX-2 error% lst-approximation al_bl $sum totalProduct _simple _s2 win?gate Valid and Invalid Identifiers no: '-' is special character no: ' %' is special character no: '-' is special character no: ' $ ' is special character and good style but may cause confusion... but may cause confusion... no: ' ? ' is special character MET CS 563--Fall 2008 2. Programming Fundamentals
Naming Rules and Styles • Case sensitive: upper and lower case of the same letter are different characters, thus • Count and count refer to different objects. • Convention: begin object name with lower case letter, e.g. • speed point sum • Convention: use upper case letters in the name to make composite names more readable, e.g. • totalSum hourlyPay (preferred to • total_sum hourly_pay ) MET CS 563--Fall 2008 2. Programming Fundamentals
Keywords and Special Names • Certain identifiers, called keywords, have a special meaning and cannot be used as object names • int float for while do (complete list p.60 in text) • Another set of identifiers that are not keywords are commonly used for fixed purposes and should not be used as as object names, e.g. • main cin cout • Identifiers beginning with an underscore are often used by special operating system facilities and their use as ordinary identifiers may cause confusion. MET CS 563--Fall 2008 2. Programming Fundamentals
Basic Data Types Keyword char int short long float double Typical Size 1B = 8b 16 or 32 b Example Literals 'a' 'C' 2000 3.14169 double is the working data type MET CS 563--Fall 2008 2. Programming Fundamentals
sum count ?? 0 Declaring and Initializing Data Objects int sum; //reserves place for sum //no value given int count=0; // reserves place and //gives value - initialization Note: The above can also be done in one line as int sum, count=0; Question: Where in the programs can objects be declared? Anywhere, but it is a good idea to declare them close to the place they will be used. MET CS 563--Fall 2008 2. Programming Fundamentals
Expressionsand Statements • Computations are done by evaluating expressions, e.g. • count + 5 • speed*time • The values of the above expressions will be lost if not saved to a specific place in memory. This is done through an assignment statement, e.g. • distance = speed*time; • More generally • <identifier>= <expression>; • Another type of statement • cin >> speed; • The expression is evaluated, but its value is not interesting. What is of interest is the side effect it produces that consists in changing the value of the object speed to whatever is entered from the keyboard. MET CS 563--Fall 2008 2. Programming Fundamentals
Arithmetic Operators • Binary operators: operators applied on two operands • <operand1><operand1><result> • Examples: addidion ( +), subtraction (-), multiplication ( *), division (/), modulus (%) • Note: • a)The addition of two integers results in an integer, and similarly division of two integers will yield only the integer part of the division, dropping any existing fractional part. • b) The addition of an integer and a float results in a float, i.e. the value of the expression takes the type of the larger size operand - type promotion or implicit conversion. Similarly for other operations. • Unary operators: operators applied on a single operand • <operand> or <operand> • Examples: increment (++ ), decrement (--) MET CS 563--Fall 2008 2. Programming Fundamentals
Precedence and Associativity • Problem: In what order should operators be executed? • Precedence:In an expression containing different operators the order of operation is determined by rules establishing a precedence of the operator relative to each other. • Highest Lowest • Associativity: In a sequence of operators of the same precedence the order of execution is defined either from left to right (), called left-associative, or from right to left (), called right-associative • a*b* c a+b+c * / % ++ -- + - ( ) MET CS 563--Fall 2008 2. Programming Fundamentals
Boolean Operators: equality, relational Boolean operands: can take only two values true (1 or anything 0) or false (0) Boolean operators: applied on Boolean operands and yielding true or false. Math Notation C++ Notation Associativity/Precedence Equality operators a b a == b a b a != b Relational operators a b a b a b a b a b a = b a b a = b Same precedence Same precedence Note how similar the assignment operator (=) and the relational equality operator (==) are and think of the confusion they may cause ! MET CS 563--Fall 2008 2. Programming Fundamentals
binary unary Boolean Operators: or, and, not Logical operators OR: operand1 operand2 operand1 || operand2 true true true true false true false true true false false false AND: operand1 operand2 operand1&& operand2 true true true true false false false true false false false false NOT: operand !operand true false false true MET CS 563--Fall 2008 2. Programming Fundamentals
Precedence Overview highest ( ) ++ -- ! * / % + - < <= >= > == != && || = unary Arithmetic Relational Equality Logical Assignment lowest MET CS 563--Fall 2008 2. Programming Fundamentals
Input Streams • Input stream cin can be taught as stream connected to the keyboard from which it takes a sequence of characters and stores them into the right hand operand of the input operator >> • cin >> theInput; • Multiple rhs operands • cin >> x >> y >> z; • require the user to enter multiple (here three values) separated by whitespace, e.g. • 5.1 3 7.55 MET CS 563--Fall 2008 2. Programming Fundamentals
Output Stream • Output stream cout can be taught as a stream connected to the screen to which it sends the value of the right hand operand of the output operator << • cout<< theOutput; • Output statements can be combined: • cout << "The sum of "; • cout << a << "and "; • cout << b << "is "; • cout << sum << endl; • cout << "The sum of " << a << "and " << b << "is "<< sum << endl; is equivalent to MET CS 563--Fall 2008 2. Programming Fundamentals
Output Stream (continued) Starting a new line with endl or "\n" Both will start a newline, but when endl is inserted into the output stream the data that have not yet been displayed will be displayed (the output buffer is flushed), while when inserting "\n"the display may be delayed. MET CS 563--Fall 2008 2. Programming Fundamentals
2.2. Editors, Compilers, Debuggers Editor: Program for creating source code file. Example: emacs, vi in Unix Compiler: program for translating source code into object code. Checks for syntactical mistakes. Example: gnu in Unix Debugger: program that facilitates the identification of logic errors after the program is compiled, i.e. in a syntactically correct program. Example: IDE: Integrated Development Environment that contains all of the above as well as additional features, such as documentation, visualization, program templates. Example: Visual Studio MET CS 563--Fall 2008 2. Programming Fundamentals
Visual C++ .NET – Projects File New Project or Ctrl+Shft+N – to create a new project In Projet Types choose: Visual C++ Projects .NET In Templates choose: Empty Project Name: supply project name, e.g. welcome Location: choose folder to save project File Open Project or Ctrl+Shft+O – to open an existing project File New File or Ctrl+N – to create a new file without adding to project File New File or Ctrl+O – to open an existing file without adding to project Projects Add New Item or Ctrl+Shft+A - to create a new C++ source file and add it to project In Templates choose: C++ File (cpp) Name: supply file name, e.g. hello Location: choose folder to save file Projects Add Existing Item or Alt+Shft+A - to include existing file into project To exclude a file from a project (the file is NOT deleted):right click on the file and select Remove MET CS 563--Fall 2008 2. Programming Fundamentals
Visual C++ .NET – Compile and Run Ctr + Shft + B- to build / compile the project or Build Build Solution Ctr + F5- to run the project outside debugger or Debug Start Without Debugging F5 - to run the project intside debugger or Debug Start MET CS 563--Fall 2008 2. Programming Fundamentals
Visual C++ .NET – Console Projects If in File New Project you select inTemplates: Console Application Name: Supply Project Name, e.g. welcome Location: Choose Folder for Project VC++ automatically creates the following files Source files: welcome.cpp – the main application source stdafx.cpp Header file: stdafx.h Project file: welcome.vcproj Note: In addition there are a bunch of other files that we do not have to care about for the moment. the stdafx.cpp and stdafx.h are specific to the way VC++ sets up console projects; and are used to build pre-compiled header welcome.pch and a precompiled types file named stdafx.obj. These files are not needed if you run the program from the command line with a C++ compiler, but are needed when running the VC++ project and should not be removed when working in VC++. MET CS 563--Fall 2008 2. Programming Fundamentals
2.3. More on Preprocessing Directives • Before the source code is given to the compiler it is processed by a program, called the preprocessor, that adds code to the source file or makes modifications (typically substitutions) to existing source code. • The resulting "preprocessed" program is then passed to the compiler. • The changes to be made by the preprocessor are specified in lines of code, called preprocessing directives, that follow the following rules: • # must be the first character on the line, followed by the directive name. (Newer compilers allow # to be the first non-blank character on the line. ) • The directive takes up the entire line; if it needs to continue to the next line the previous line must end with a backslash '\' • Does not end with semicolon ; MET CS 563--Fall 2008 2. Programming Fundamentals
#includefileName The preprocessor takes entire file specified as the directive argument fileName and replaces the directive with the text of the file. Standard directory file names are enclosed in angle brackets < >: # include <iostream> # include <math> User defined files names are enclosed in double quotes " " : # include "c:\cs563\examples\myHeaderFile.h" MET CS 563--Fall 2008 2. Programming Fundamentals
# include <iostream> using std :: cout using std :: cin using std :: endl int main(){ … cout << " Enter integer: "; cin >> count; cout << " You entered " << count << endl; … } using namespace Directive identifies the group (scope) to which the header files belong (not a preprocessing directive) # include <iostream> int main(){ … std :: cout << " Enter integer: "; std :: cin >> count; std :: cout << " You entered " << count << endl; … } # include <iostream> using namespace std ; int main(){ … cout << " Enter integer: "; cin >> count; cout << " You entered " << count << endl; … } ends with ; # include <iostream.h> // old style int main(){ … cout << " Enter integer: "; cin >> count; cout << " You entered " << count << endl; … } MET CS 563--Fall 2008 2. Programming Fundamentals
#define TEXT SUBSTITUTE The preprocessor replaces every occurrence of the first argument TEXT with the second argument SUBSTITUTE. # define PI 3.14159266 MET CS 563--Fall 2008 2. Programming Fundamentals
2.4. Fundamental Built-In Scalar Types • The type determines • what operations are applied, e.g. double % int is illegal and • how operations interpreted, e.g. + can be int or floating point operation char can be printed as char or int. • Conversion between types can be done • implicitly through promotion rules that can be stated roughly as "a mixed type expression takes the type of the operand with the largest memory size", e.g. char is promoted to int, int to float, float to double. Warning: does not always work - sometimes may change the value • explicitly through cast operators MET CS 563--Fall 2008 2. Programming Fundamentals
1. The static cast operator is an unary operator that allows explicit conversion of one data type into another Casts Angle brackets are part of syntax and type is the new data type keyword Syntax: static_cast< type> (identifier) e.g.: static_cast<double> (totalStudentsEnrolled) precedence higher than unary + and -, same as postincrement associativity is from right to left (See Appendix A: Operator Precedence Chart p.1102) Name of data object whose type is changed 2. The same is accomplished with type (identifier) e.g.: double(totalStudentsEnrolled) (See examples in L2-3-typeConversion.cpp program) MET CS 563--Fall 2008 2. Programming Fundamentals
int i=2, j=3; cout<<"Integer operations:\n"; cout<<"i = " << i << ", j = " << j << endl; cout<<"(i+j)/2 = "<<(i+j)/2 <<endl; cout<<"double value of (i+j)/2 = "<< static_cast<double> ((i+j))/2 <<endl; cout<<"double value of (i+j)/2 = "<< double ((i+j))/2 <<endl; cout<<"(i+j)%2 = "<<(i+j)%2 <<endl; double x=2, y=3; cout<<"\nDouble operations:\n"; cout<<"x = " << x << ", y = " << y << endl; cout<<"(x+y)/2 = "<<(x+y)/2 <<endl; //cout<<"(x+y)%2 = "<<(x+y)%2 <<endl; illegal operation Examples: int, double (L2-3-typesConversion.cpp) Integer operations: i = 2, j = 3 (i+j)/2 = 2 double value of(i+j)/2 = 2.5 double value of(i+j)/2 = 2.5 (i+j)%2 = 1 Double operations: x = 2, y = 3 (x+y)/2 = 2.5 MET CS 563--Fall 2008 2. Programming Fundamentals
Examples: char (source file L2-3-typesConversion.cpp) char let1='a', let2='A'; cout<<"\nChar operations:\n"; cout<<"let1 = " << let1 << ", let2 = " << let2 << endl; cout<<"int value of let1 = " << int(let1) << ",\n int value of let2 = " << int(let2) << endl; cout<<"(let1+let2)/2 = "<<(let1+let2)/2 <<endl; cout<<"(let1+let2)/2 = "<<static_cast<char>((let1+let2)/2) <<endl; cout<<"(let1+let2)/2 = "<<char((let1+let2)/2) <<endl; Char operations: let1 = a, let2 = A int value of let1 = 97, int value of let2 = 65 (let1+let2)/2 = 81 (let1+let2)/2 = Q (let1+let2)/2 = Q MET CS 563--Fall 2008 2. Programming Fundamentals
Type Qualifiers: unsigned, signed, short, long The characteristics of arithmetic types can be modified by qualifiers Size: short, long. Size is machine dependent and can be checked with the sizeof() operator. In general: 1 sizeof(char) sizeof(short) sizeof(int) sizeof(long) 1 sizeof(bool) sizeof(long) Range is modified by the qualifiers signed and unsigned: numbers are represented in two's complement and the first bit is used for the sign (0 positive, 1- negative) Range is machine dependent and can be found in the <limits> standard library (that of course needs to be included with #include <limits>). bool char can be preceded by signed, or unsigned qualifiers. Warning: default is machine dependent int can be preceded by any combination of signed, unsigned, short, long. Note: int can be omitted in the combination float double can be preceded by long MET CS 563--Fall 2008 2. Programming Fundamentals
Type sizes with sizeof() (source file: L2-4typeSizes.cpp) cout<<"Size of char is " << sizeof(char)<<endl; cout<<"Size of bool is " << sizeof(bool)<<endl; cout<<"Size of short int is " << sizeof(short)<<endl; cout<<"Size of int is " << sizeof(int)<<endl; cout<<"Size of long int is " << sizeof(long)<<endl; cout<<"Size of float is " << sizeof(float)<<endl; cout<<"Size of double is " << sizeof(double)<<endl; cout<<"Size of long double is " << sizeof(long double)<<endl; Size of char is 1 Size of bool is 1 Size of short int is 2 Size of int is 4 Size of long int is 4 Size of float is 4 Size of double is 8 Size of long double is 8 MET CS 563--Fall 2008 2. Programming Fundamentals
char with qualifiers unsigned, signed • char >= 1B=8b, almost universally 1B • unit for size of other types • literals enclosed in single quotes: 'c', '\n' • range depends on whether unsigned: 256=28 distinct values [0, 255] signed: two's complement representation 1st bit for sign, 128=27 negative and 128 positive values [-128, +127] Tip: As the default being machine dependent it is always safe to use char in the range of [0,127] • overflow/underflow no error message given!!! MET CS 563--Fall 2008 2. Programming Fundamentals
#include <limits> #include <iostream> using namespace std; int main() { cout<<"Largest char value is CHAR_MAX = " << CHAR_MAX <<endl; cout<<"Largest char value is numeric_limits<char>::max() = " << numeric_limits<char>::max() << endl; cout<<"Smallest char value is CHAR_MIN = " << CHAR_MIN <<endl; cout<<"Smallest char value is numeric_limits<char>::min() = " << numeric_limits<char>::min() <<endl; …. char range (source file: L2-5-typeLimits.cpp) Largest char value is CHAR_MAX = 127 Largest char value is numeric_limits<char>::max() = ⌂ Smallest char value is CHAR_MIN = -128 Smallest char value is numeric_limits<char>::min() = Ç MET CS 563--Fall 2008 2. Programming Fundamentals
cout<<"Character Overflow \n"; char c = CHAR_MAX - 2; cout<<"char c = Char_MAX - 2 = "<<c<<endl; cout<<"c+1 = "<<c+1<<" cast to char " << char(c+1)<<endl; cout<<"c+2 = "<<c+2<<" cast to char " << char(c+2)<<endl; cout<<"c+3 = "<<c+3<<" cast to char " << char(c+3)<<endl; cout<<"c+4 = "<<c+4<<" cast to char " << char(c+4)<<endl; cout<<"Character Underflow \n"; c = CHAR_MIN + 2; cout<<"char c = CHAR_MIN + 2 = "<<c<<endl; cout<<"c-1 = "<<c-1<<" cast to char " << char(c-1)<<endl; cout<<"c-2 = "<<c-2<<" cast to char " << char(c-2)<<endl; cout<<"c-3 = "<<c-3<<" cast to char " << char(c-3)<<endl; cout<<"c-4 = "<<c-4<<" cast to char " << char(c-4)<<endl; char overflow (source file L2-6-intOverflow.cpp) Character Overflow char c = Char_MAX - 2 = } c+1 = 126 cast to char ~ c+2 = 127 cast to char ⌂ c+3 = 128 cast to char Ç c+4 = 129 cast to char ü Character Underflow char c = CHAR_MIN + 2 = é c-1 = -127 cast to char ü c-2 = -128 cast to char Ç c-3 = -129 cast to char ⌂ c-4 = -130 cast to char ~ MET CS 563--Fall 2008 2. Programming Fundamentals
int typically 4B (can be 2B) • literals: decimal (radix 10) 2 63 83 octal (radix 8) prefix zero(0) 02 077 0123 hexadecimal (radix 16) prefix zero-x(0x) 0x2 0x3f 0x53 suffixes: U for unsigned, L for long: 123456789L • range depends on whether signed or unsigned e.g. for short int of 2B: unsigned: 65536=216 distinct values [0, 65535] signed: 32768=215 negative and 32768 non-negative(0 and 32767 positive) values [- 32768, + 32767] • Warning: not a good idea to use unsigned to gain 1 more bit: it is obliterated by promotion rules any way. Tip: Because of 1 sizeof(char) sizeof(short) sizeof(ints) sizeof(long) integers are either 16 or 32 b depending on the hardware but short are 2B and long are 4B on practically every machine • overflow no error message given!!! int with qualifiers unsigned, signed, short, long MET CS 563--Fall 2008 2. Programming Fundamentals
cout<<"\nLargest short int value is numeric_limits<short int>::max() = " << numeric_limits<short int>::max() << endl; cout<<"Smallest short int value is numeric_limits<short int>::min() = " << numeric_limits<short int>::min() <<endl; cout<<"\nLargest int value is INT_MAX = " << INT_MAX <<endl; cout<<"Largest int value is numeric_limits<int>::max() = " << numeric_limits<int>::max() <<endl; cout<<"Smallest int value is INT_MIN = " << INT_MIN <<endl; cout<<"Smallest int value is numeric_limits<int>::min() = " << numeric_limits<int>::min() <<endl; cout<<"\nLargest long int value is numeric_limits<long int>::max() = " << numeric_limits<long int>::max() << endl; cout<<"Smallest long int value is numeric_limits<long int>::min() = " << numeric_limits<long int>::min() <<endl;…. int range (source file: L2-5-typeLimits.cpp) Largest short int value is numeric_limits<short int>::max() = 32767 Smallest short int value is numeric_limits<short int>::min() = -32768 Largest int value is INT_MAX = 2147483647 Largest int value is numeric_limits<int>::max() = 2147483647 Smallest int value is INT_MIN = -2147483648 Smallest int value is numeric_limits<int>::min() = -2147483648 Largest long int value is numeric_limits<long int>::max() = 2147483647 Smallest long int value is numeric_limits<long int>::min() = -2147483648 MET CS 563--Fall 2008 2. Programming Fundamentals
int overflow (source file L2-6-intOverflow.cpp) cout<<"Integer Overflow \n"; int num = INT_MAX - 2; cout<<"int num = INT_MAX - 2 = "<<num<<endl; cout<<"num+1 = "<<num+1<<endl; cout<<"num+2 = "<<num+2<<endl; cout<<"num+3 = "<<num+3<<endl; cout<<"num+4 = "<<num+4<<endl; Integer Overflow int num = INT_MAX - 2 = 2147483645 num+1 = 2147483646 num+2 = 2147483647 num+3 = -2147483648 num+4 = -2147483647 MET CS 563--Fall 2008 2. Programming Fundamentals
unsigned int underflow (source file L2-6-intOverflow.cpp) cout<<"Unsigned Integer Underflow \n"; unsigned int U_MIN = numeric_limits<unsigned int>::min(); unsigned int nonNegative = U_MIN + 2; cout<<"unsigned int nonNegative = U_MIN + 2 = "<<nonNegative<<endl; cout<<"nonNegative-1 = "<<nonNegative-1<<endl; cout<<"nonNegative-2 = "<<nonNegative-2<<endl; cout<<"nonNegative-3 = "<<nonNegative-3<<endl; cout<<"nonNegative-4 = "<<nonNegative-4<<endl; Unsigned Integer Underflow unsigned int nonNegative = U_MIN + 2 = 2 nonNegative-1 = 1 nonNegative-2 = 0 nonNegative-3 = 4294967295 nonNegative-4 = 4294967294 MET CS 563--Fall 2008 2. Programming Fundamentals
Floating Point • float single precision typically 4B • double double precision – default typically 8B • long double extended precision typically 8B or 10B • literals 124 = 1.24e2 3.1415 = .31415 e 1 suffixes: f or F for float, l or L for long 2.87e-15f, 3.14159265L, mantissa length is machine dependent, typically 7, 15, 19 for float, double, long double respectively precision is determined by the mantissa length, and is not dependent of range (see examples in precision.cpp) • range depends on exponent part, typically[ –38,+38] for float MET CS 563--Fall 2008 2. Programming Fundamentals
cout<<"\nLargest float value is numeric_limits<float>::max() = " << numeric_limits<float>::max() << endl; cout<<"Smallest float value is numeric_limits<float>::min() = " << numeric_limits<float>::min() <<endl; cout<<"\nLargest double value is numeric_limits<double>::max() = " << numeric_limits<double>::max() << endl; cout<<"Smallest double value is numeric_limits<double>::min() = " << numeric_limits<double>::min() <<endl; cout<<"\nLargest long double value is numeric_limits<long double>::max() = " << numeric_limits<long double>::max() << endl; cout<<"Smallest long double value is numeric_limits<long double>::min() = " << numeric_limits<long double>::min() <<endl; Floating Point range (source file: L2-5-typeLimits.cpp) Largest float value is numeric_limits<float>::max() = 3.40282e+038 Smallest float value is numeric_limits<float>::min() = 1.17549e-038 Largest double value is numeric_limits<double>::max() = 1.79769e+308 Smallest double value is numeric_limits<double>::min() = 2.22507e-308 Largest long double value is numeric_limits<long double>::max() = 1.79769e+308 Smallest long double value is numeric_limits<long double>::min() = 2.22507e-308 MET CS 563--Fall 2008 2. Programming Fundamentals
Entering a float or a character when an integer value is required results in program failure, e.g. program L2-7-intInput.cpp asks the user to input int values for pennies, nickels, dimes, and quarters; if a char or float is entered the remaining entries are considered 0 and the program terminates. • Typing in the value of a constant, e.g. , every time it is needed will eventually lead to an error. Instead it is better to define a constant object as is done in program L2-8-constDefinition.cpp for the volume of bottles and cans; this has the additional benefit that if changes are needed they are done in one single place. • precision is determined by mantissa length, (for double typically 15, sometimes 19) and is independent from range of the number; Thus whenever the mantissa length is exceeded an error occurs even if the value is well within the type range; The program in L2-9-precision.cpp shows some examples. • Some floating point numbers, e.g. 4. 35, do not have an exact binary representation (similarly 1/3 does not have an exact decimal representation_, and round-off errors can produce very strange results(see L2-10-roundOffError.cpp for examples). Unexpected but Common Error Sources MET CS 563--Fall 2008 2. Programming Fundamentals