a tutorial on c++ programming
TRANSCRIPT
Prof Erwin M Globio MSIT Page 1 of 66
WORKTEXT for
ITEC223
Advance Programming
(With Laboratory Exercises on every
chapter)
By
PROF ERWIN M GLOBIO MSIT
Prof Erwin M Globio MSIT Page 2 of 66
Chapter 1
Introduction to C programming language
C is a general-purpose high-level programming language with features of economy of expression modern flow control amp data structures and a rich set of operators It is not
specialized to any particular area of application the absence of restrictions and its generality make it more convenient and effective for many tasks than any other powerful
languages It is not tied to any particular hardware or system and therefore it is easy to write programs that will run without change on any machine that supports C It is often
called a middle-level computer language because it combines the best elements of high-
level languages with the control and flexibility of assembly language
Structure of programming in C Lets start learning by writing a simple program
Every C program starts execution form a user defined function called main() This
function must be present in every C program Program can have only one main function
This is a simple C++ program Call this file Samplecpp
include ltiostreamgt include ltconiohgt
using namespace std
A C++ program begins at main()
int main()
cout ltlt C++ is power programming
getch()
return 0
Before beginning letlsquos review two terms source code and object code Source code is the human readable form of the program It is stored in a text file Object code is the
executable form of the program created by the compiler
When run the program displays the following output
C++ is power programming
Although Samplecpp is quite short it includes several key features that are common
to all C++ programs Letlsquos closely examine each part of the program The program begins with the lines
Prof Erwin M Globio MSIT Page 3 of 66
This is a simple C++ program
Call this file Samplecpp
This is a comment Like most other programming languages C++ lets you enter a
remark into a programlsquos source code The contents of a comment are ignored by the compiler The purpose of a comment is to describe or explain the operation of a program to
anyone reading its source code In the case of this comment it identifies the program In more complex programs you will use comments to help explain what each feature of the
program is for and how it goes about doing its work
In the case of this comment it identifies the program In more complex programs
you will use comments to help explain what each feature of the program is for and how it goes about doing its work In other words you can use comments to provide a ―play-by-
play description of what your program does
The next line in the program is
using namespace std
This tells the compiler to use the std namespace namespaces are a relatively recent
addition to C++ A namespace creates a declarative region in which various program elements can be placed Elements declared in one namespace are separate from elements
declared in another Namespaces help in the organization of large programs The using statement informs the compiler that you want to use the std namespace This is the
namespace in which the entire Standard C++ library is declared By using the std namespace you simplify access to the standard library
The next line as the preceding comment indicates is where program execution begins
int main()
All C++ programs are composed of one or more functions As explained earlier a function is a subroutine Every C++ function must have a name and the only function that
any C++ program must include is the one shown here called main() The main() function is where program execution begins and (most commonly) ends (Technically speaking a C++
program begins with a call to main() and in most cases ends when main() returns) The
opening curly brace on the line that follows main() marks the start of the main() function code
The next line in the program is
cout ltlt C++ is power programming
This is a console output statement It causes the message C++ is power
programming to be displayed on the screen It accomplishes this by using the output
operator ltlt The ltlt operator causes whatever expression is on its right side to be output to the device specified on its left side cout is a predefined identifier that stands for console
output and generally refers to the computerlsquos screen Thus this statement causes the message to be output to the screen Notice that this statement ends with a semicolon In
fact all C++ statements end with a semicolon
Prof Erwin M Globio MSIT Page 4 of 66
The message ―C++ is power programming is a string In C++ a string is a
sequence of characters enclosed between double quotes Strings are used frequently in C++
The next line in the program is
return 0
This line terminates main() and causes it to return the value 0 to the calling process
(which is typically the operating system) For most operating systems a return value of 0
signifies that the program is terminating normally Other values indicate that the program is terminating because of some error return is one of C++lsquos keywords and it is used to
return a value from a function All of your programs should return 0 when they terminate normally (that is without error)
Control Statements
Inside a function execution proceeds from one statement to the next top to bottom It is possible however to alter this flow through the use of the various program control
statements supported by C++
The if Statement
if(condition) statement
where condition is an expression that is evaluated to be either true or false In C++ true is
nonzero and false is zero If the condition is true then the statement will execute If it is false then the statement will not execute For example the following fragment displays the
phrase 10 is less than 11 on the screen because 10 is less than 11
if(10 lt 11)
cout ltlt 10 is less than 11
However consider the following
if(10 gt 11)
cout ltlt this does not display
In this case 10 is not greater than 11 so the cout statement is not executed Of course the operands inside an if statement need not be constants They can also be
variables C++ defines a full complement of relational operators that can be used in a conditional expression They are shown here
Operator Meaning
lt Less than
lt= Less than equal to
gt Greater than
gt= Greater that equal to
== Equal to
= Not equal to
Prof Erwin M Globio MSIT Page 5 of 66
Notice that the test for equality is the double equal sign Here is a program that
illustrates the if statement
include ltiostreamgt
include ltconiohgt using namespace std
int main()
int a b c
a = 2 b = 3
if (a lt b)
cout ltlt a is less than bn An if statement
this wont display anything
if (a == b)
cout ltlt you wont see thisn cout ltltn
c = b - a c now contains 1
cout ltlt c contains 1n
if (cgt= 0) cout ltlt c is non-negative n
if (c lt 0) cout ltlt c is negative n
getch() return 0
The output generated by this program is shown here
a is less than b
c contains -1 c is negative
c contains 1
c is non-negative
The complete form of the if the statement is
if(expression)
statement else
statement
where the targets of the if and else are single statements The else clause is optional The targets of both the if and else can also be blocks of statement The general forms of the if
using blocks of statements is
Prof Erwin M Globio MSIT Page 6 of 66
if(expression)
statement sequence
else
statement sequence
If the conditional expression is true the target of the if will be executed otherwise
the target of the else if it exists will be executed At no time will both be executed The
conditional expression controlling the if may be any type of valid C++ expression that produces a true or false result
The following demonstrates the if by playing a simple version of the ―guess the
magic number game The program generates a random numbers prompts for your guess and prints the message Right if you guess the magic number This program also
introduces another C++ library function called rand( ) which returns a randomly selected integer value It requires the ltstdlibgt header
include ltiostreamgt include ltconiohgt
using namespace std
main()
int magic guess
magic = rand()
cout ltlt Enter your guess cin gtgt guess
if (guess == magic) cout ltlt Right
getch()
return 0
This program uses the iflsquo statement to determine whether the userlsquos guess matches the magic number If it does the message is printed on the screen
Modular Programming
As programs grow in size it becomes important to break them into separate parts (modules) that communicate with rest of the program through a few well defined interfaces
If we decompose the program into modules well is we can code each module
independently Also if change happens we can localize changes to a particular module without impacting the rest of the programs
For example as is their habit a LCD which we had used in a product went obsolete
We had a written the hardware abstraction layer for the LCD as a separate module We
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 2 of 66
Chapter 1
Introduction to C programming language
C is a general-purpose high-level programming language with features of economy of expression modern flow control amp data structures and a rich set of operators It is not
specialized to any particular area of application the absence of restrictions and its generality make it more convenient and effective for many tasks than any other powerful
languages It is not tied to any particular hardware or system and therefore it is easy to write programs that will run without change on any machine that supports C It is often
called a middle-level computer language because it combines the best elements of high-
level languages with the control and flexibility of assembly language
Structure of programming in C Lets start learning by writing a simple program
Every C program starts execution form a user defined function called main() This
function must be present in every C program Program can have only one main function
This is a simple C++ program Call this file Samplecpp
include ltiostreamgt include ltconiohgt
using namespace std
A C++ program begins at main()
int main()
cout ltlt C++ is power programming
getch()
return 0
Before beginning letlsquos review two terms source code and object code Source code is the human readable form of the program It is stored in a text file Object code is the
executable form of the program created by the compiler
When run the program displays the following output
C++ is power programming
Although Samplecpp is quite short it includes several key features that are common
to all C++ programs Letlsquos closely examine each part of the program The program begins with the lines
Prof Erwin M Globio MSIT Page 3 of 66
This is a simple C++ program
Call this file Samplecpp
This is a comment Like most other programming languages C++ lets you enter a
remark into a programlsquos source code The contents of a comment are ignored by the compiler The purpose of a comment is to describe or explain the operation of a program to
anyone reading its source code In the case of this comment it identifies the program In more complex programs you will use comments to help explain what each feature of the
program is for and how it goes about doing its work
In the case of this comment it identifies the program In more complex programs
you will use comments to help explain what each feature of the program is for and how it goes about doing its work In other words you can use comments to provide a ―play-by-
play description of what your program does
The next line in the program is
using namespace std
This tells the compiler to use the std namespace namespaces are a relatively recent
addition to C++ A namespace creates a declarative region in which various program elements can be placed Elements declared in one namespace are separate from elements
declared in another Namespaces help in the organization of large programs The using statement informs the compiler that you want to use the std namespace This is the
namespace in which the entire Standard C++ library is declared By using the std namespace you simplify access to the standard library
The next line as the preceding comment indicates is where program execution begins
int main()
All C++ programs are composed of one or more functions As explained earlier a function is a subroutine Every C++ function must have a name and the only function that
any C++ program must include is the one shown here called main() The main() function is where program execution begins and (most commonly) ends (Technically speaking a C++
program begins with a call to main() and in most cases ends when main() returns) The
opening curly brace on the line that follows main() marks the start of the main() function code
The next line in the program is
cout ltlt C++ is power programming
This is a console output statement It causes the message C++ is power
programming to be displayed on the screen It accomplishes this by using the output
operator ltlt The ltlt operator causes whatever expression is on its right side to be output to the device specified on its left side cout is a predefined identifier that stands for console
output and generally refers to the computerlsquos screen Thus this statement causes the message to be output to the screen Notice that this statement ends with a semicolon In
fact all C++ statements end with a semicolon
Prof Erwin M Globio MSIT Page 4 of 66
The message ―C++ is power programming is a string In C++ a string is a
sequence of characters enclosed between double quotes Strings are used frequently in C++
The next line in the program is
return 0
This line terminates main() and causes it to return the value 0 to the calling process
(which is typically the operating system) For most operating systems a return value of 0
signifies that the program is terminating normally Other values indicate that the program is terminating because of some error return is one of C++lsquos keywords and it is used to
return a value from a function All of your programs should return 0 when they terminate normally (that is without error)
Control Statements
Inside a function execution proceeds from one statement to the next top to bottom It is possible however to alter this flow through the use of the various program control
statements supported by C++
The if Statement
if(condition) statement
where condition is an expression that is evaluated to be either true or false In C++ true is
nonzero and false is zero If the condition is true then the statement will execute If it is false then the statement will not execute For example the following fragment displays the
phrase 10 is less than 11 on the screen because 10 is less than 11
if(10 lt 11)
cout ltlt 10 is less than 11
However consider the following
if(10 gt 11)
cout ltlt this does not display
In this case 10 is not greater than 11 so the cout statement is not executed Of course the operands inside an if statement need not be constants They can also be
variables C++ defines a full complement of relational operators that can be used in a conditional expression They are shown here
Operator Meaning
lt Less than
lt= Less than equal to
gt Greater than
gt= Greater that equal to
== Equal to
= Not equal to
Prof Erwin M Globio MSIT Page 5 of 66
Notice that the test for equality is the double equal sign Here is a program that
illustrates the if statement
include ltiostreamgt
include ltconiohgt using namespace std
int main()
int a b c
a = 2 b = 3
if (a lt b)
cout ltlt a is less than bn An if statement
this wont display anything
if (a == b)
cout ltlt you wont see thisn cout ltltn
c = b - a c now contains 1
cout ltlt c contains 1n
if (cgt= 0) cout ltlt c is non-negative n
if (c lt 0) cout ltlt c is negative n
getch() return 0
The output generated by this program is shown here
a is less than b
c contains -1 c is negative
c contains 1
c is non-negative
The complete form of the if the statement is
if(expression)
statement else
statement
where the targets of the if and else are single statements The else clause is optional The targets of both the if and else can also be blocks of statement The general forms of the if
using blocks of statements is
Prof Erwin M Globio MSIT Page 6 of 66
if(expression)
statement sequence
else
statement sequence
If the conditional expression is true the target of the if will be executed otherwise
the target of the else if it exists will be executed At no time will both be executed The
conditional expression controlling the if may be any type of valid C++ expression that produces a true or false result
The following demonstrates the if by playing a simple version of the ―guess the
magic number game The program generates a random numbers prompts for your guess and prints the message Right if you guess the magic number This program also
introduces another C++ library function called rand( ) which returns a randomly selected integer value It requires the ltstdlibgt header
include ltiostreamgt include ltconiohgt
using namespace std
main()
int magic guess
magic = rand()
cout ltlt Enter your guess cin gtgt guess
if (guess == magic) cout ltlt Right
getch()
return 0
This program uses the iflsquo statement to determine whether the userlsquos guess matches the magic number If it does the message is printed on the screen
Modular Programming
As programs grow in size it becomes important to break them into separate parts (modules) that communicate with rest of the program through a few well defined interfaces
If we decompose the program into modules well is we can code each module
independently Also if change happens we can localize changes to a particular module without impacting the rest of the programs
For example as is their habit a LCD which we had used in a product went obsolete
We had a written the hardware abstraction layer for the LCD as a separate module We
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 3 of 66
This is a simple C++ program
Call this file Samplecpp
This is a comment Like most other programming languages C++ lets you enter a
remark into a programlsquos source code The contents of a comment are ignored by the compiler The purpose of a comment is to describe or explain the operation of a program to
anyone reading its source code In the case of this comment it identifies the program In more complex programs you will use comments to help explain what each feature of the
program is for and how it goes about doing its work
In the case of this comment it identifies the program In more complex programs
you will use comments to help explain what each feature of the program is for and how it goes about doing its work In other words you can use comments to provide a ―play-by-
play description of what your program does
The next line in the program is
using namespace std
This tells the compiler to use the std namespace namespaces are a relatively recent
addition to C++ A namespace creates a declarative region in which various program elements can be placed Elements declared in one namespace are separate from elements
declared in another Namespaces help in the organization of large programs The using statement informs the compiler that you want to use the std namespace This is the
namespace in which the entire Standard C++ library is declared By using the std namespace you simplify access to the standard library
The next line as the preceding comment indicates is where program execution begins
int main()
All C++ programs are composed of one or more functions As explained earlier a function is a subroutine Every C++ function must have a name and the only function that
any C++ program must include is the one shown here called main() The main() function is where program execution begins and (most commonly) ends (Technically speaking a C++
program begins with a call to main() and in most cases ends when main() returns) The
opening curly brace on the line that follows main() marks the start of the main() function code
The next line in the program is
cout ltlt C++ is power programming
This is a console output statement It causes the message C++ is power
programming to be displayed on the screen It accomplishes this by using the output
operator ltlt The ltlt operator causes whatever expression is on its right side to be output to the device specified on its left side cout is a predefined identifier that stands for console
output and generally refers to the computerlsquos screen Thus this statement causes the message to be output to the screen Notice that this statement ends with a semicolon In
fact all C++ statements end with a semicolon
Prof Erwin M Globio MSIT Page 4 of 66
The message ―C++ is power programming is a string In C++ a string is a
sequence of characters enclosed between double quotes Strings are used frequently in C++
The next line in the program is
return 0
This line terminates main() and causes it to return the value 0 to the calling process
(which is typically the operating system) For most operating systems a return value of 0
signifies that the program is terminating normally Other values indicate that the program is terminating because of some error return is one of C++lsquos keywords and it is used to
return a value from a function All of your programs should return 0 when they terminate normally (that is without error)
Control Statements
Inside a function execution proceeds from one statement to the next top to bottom It is possible however to alter this flow through the use of the various program control
statements supported by C++
The if Statement
if(condition) statement
where condition is an expression that is evaluated to be either true or false In C++ true is
nonzero and false is zero If the condition is true then the statement will execute If it is false then the statement will not execute For example the following fragment displays the
phrase 10 is less than 11 on the screen because 10 is less than 11
if(10 lt 11)
cout ltlt 10 is less than 11
However consider the following
if(10 gt 11)
cout ltlt this does not display
In this case 10 is not greater than 11 so the cout statement is not executed Of course the operands inside an if statement need not be constants They can also be
variables C++ defines a full complement of relational operators that can be used in a conditional expression They are shown here
Operator Meaning
lt Less than
lt= Less than equal to
gt Greater than
gt= Greater that equal to
== Equal to
= Not equal to
Prof Erwin M Globio MSIT Page 5 of 66
Notice that the test for equality is the double equal sign Here is a program that
illustrates the if statement
include ltiostreamgt
include ltconiohgt using namespace std
int main()
int a b c
a = 2 b = 3
if (a lt b)
cout ltlt a is less than bn An if statement
this wont display anything
if (a == b)
cout ltlt you wont see thisn cout ltltn
c = b - a c now contains 1
cout ltlt c contains 1n
if (cgt= 0) cout ltlt c is non-negative n
if (c lt 0) cout ltlt c is negative n
getch() return 0
The output generated by this program is shown here
a is less than b
c contains -1 c is negative
c contains 1
c is non-negative
The complete form of the if the statement is
if(expression)
statement else
statement
where the targets of the if and else are single statements The else clause is optional The targets of both the if and else can also be blocks of statement The general forms of the if
using blocks of statements is
Prof Erwin M Globio MSIT Page 6 of 66
if(expression)
statement sequence
else
statement sequence
If the conditional expression is true the target of the if will be executed otherwise
the target of the else if it exists will be executed At no time will both be executed The
conditional expression controlling the if may be any type of valid C++ expression that produces a true or false result
The following demonstrates the if by playing a simple version of the ―guess the
magic number game The program generates a random numbers prompts for your guess and prints the message Right if you guess the magic number This program also
introduces another C++ library function called rand( ) which returns a randomly selected integer value It requires the ltstdlibgt header
include ltiostreamgt include ltconiohgt
using namespace std
main()
int magic guess
magic = rand()
cout ltlt Enter your guess cin gtgt guess
if (guess == magic) cout ltlt Right
getch()
return 0
This program uses the iflsquo statement to determine whether the userlsquos guess matches the magic number If it does the message is printed on the screen
Modular Programming
As programs grow in size it becomes important to break them into separate parts (modules) that communicate with rest of the program through a few well defined interfaces
If we decompose the program into modules well is we can code each module
independently Also if change happens we can localize changes to a particular module without impacting the rest of the programs
For example as is their habit a LCD which we had used in a product went obsolete
We had a written the hardware abstraction layer for the LCD as a separate module We
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 4 of 66
The message ―C++ is power programming is a string In C++ a string is a
sequence of characters enclosed between double quotes Strings are used frequently in C++
The next line in the program is
return 0
This line terminates main() and causes it to return the value 0 to the calling process
(which is typically the operating system) For most operating systems a return value of 0
signifies that the program is terminating normally Other values indicate that the program is terminating because of some error return is one of C++lsquos keywords and it is used to
return a value from a function All of your programs should return 0 when they terminate normally (that is without error)
Control Statements
Inside a function execution proceeds from one statement to the next top to bottom It is possible however to alter this flow through the use of the various program control
statements supported by C++
The if Statement
if(condition) statement
where condition is an expression that is evaluated to be either true or false In C++ true is
nonzero and false is zero If the condition is true then the statement will execute If it is false then the statement will not execute For example the following fragment displays the
phrase 10 is less than 11 on the screen because 10 is less than 11
if(10 lt 11)
cout ltlt 10 is less than 11
However consider the following
if(10 gt 11)
cout ltlt this does not display
In this case 10 is not greater than 11 so the cout statement is not executed Of course the operands inside an if statement need not be constants They can also be
variables C++ defines a full complement of relational operators that can be used in a conditional expression They are shown here
Operator Meaning
lt Less than
lt= Less than equal to
gt Greater than
gt= Greater that equal to
== Equal to
= Not equal to
Prof Erwin M Globio MSIT Page 5 of 66
Notice that the test for equality is the double equal sign Here is a program that
illustrates the if statement
include ltiostreamgt
include ltconiohgt using namespace std
int main()
int a b c
a = 2 b = 3
if (a lt b)
cout ltlt a is less than bn An if statement
this wont display anything
if (a == b)
cout ltlt you wont see thisn cout ltltn
c = b - a c now contains 1
cout ltlt c contains 1n
if (cgt= 0) cout ltlt c is non-negative n
if (c lt 0) cout ltlt c is negative n
getch() return 0
The output generated by this program is shown here
a is less than b
c contains -1 c is negative
c contains 1
c is non-negative
The complete form of the if the statement is
if(expression)
statement else
statement
where the targets of the if and else are single statements The else clause is optional The targets of both the if and else can also be blocks of statement The general forms of the if
using blocks of statements is
Prof Erwin M Globio MSIT Page 6 of 66
if(expression)
statement sequence
else
statement sequence
If the conditional expression is true the target of the if will be executed otherwise
the target of the else if it exists will be executed At no time will both be executed The
conditional expression controlling the if may be any type of valid C++ expression that produces a true or false result
The following demonstrates the if by playing a simple version of the ―guess the
magic number game The program generates a random numbers prompts for your guess and prints the message Right if you guess the magic number This program also
introduces another C++ library function called rand( ) which returns a randomly selected integer value It requires the ltstdlibgt header
include ltiostreamgt include ltconiohgt
using namespace std
main()
int magic guess
magic = rand()
cout ltlt Enter your guess cin gtgt guess
if (guess == magic) cout ltlt Right
getch()
return 0
This program uses the iflsquo statement to determine whether the userlsquos guess matches the magic number If it does the message is printed on the screen
Modular Programming
As programs grow in size it becomes important to break them into separate parts (modules) that communicate with rest of the program through a few well defined interfaces
If we decompose the program into modules well is we can code each module
independently Also if change happens we can localize changes to a particular module without impacting the rest of the programs
For example as is their habit a LCD which we had used in a product went obsolete
We had a written the hardware abstraction layer for the LCD as a separate module We
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 5 of 66
Notice that the test for equality is the double equal sign Here is a program that
illustrates the if statement
include ltiostreamgt
include ltconiohgt using namespace std
int main()
int a b c
a = 2 b = 3
if (a lt b)
cout ltlt a is less than bn An if statement
this wont display anything
if (a == b)
cout ltlt you wont see thisn cout ltltn
c = b - a c now contains 1
cout ltlt c contains 1n
if (cgt= 0) cout ltlt c is non-negative n
if (c lt 0) cout ltlt c is negative n
getch() return 0
The output generated by this program is shown here
a is less than b
c contains -1 c is negative
c contains 1
c is non-negative
The complete form of the if the statement is
if(expression)
statement else
statement
where the targets of the if and else are single statements The else clause is optional The targets of both the if and else can also be blocks of statement The general forms of the if
using blocks of statements is
Prof Erwin M Globio MSIT Page 6 of 66
if(expression)
statement sequence
else
statement sequence
If the conditional expression is true the target of the if will be executed otherwise
the target of the else if it exists will be executed At no time will both be executed The
conditional expression controlling the if may be any type of valid C++ expression that produces a true or false result
The following demonstrates the if by playing a simple version of the ―guess the
magic number game The program generates a random numbers prompts for your guess and prints the message Right if you guess the magic number This program also
introduces another C++ library function called rand( ) which returns a randomly selected integer value It requires the ltstdlibgt header
include ltiostreamgt include ltconiohgt
using namespace std
main()
int magic guess
magic = rand()
cout ltlt Enter your guess cin gtgt guess
if (guess == magic) cout ltlt Right
getch()
return 0
This program uses the iflsquo statement to determine whether the userlsquos guess matches the magic number If it does the message is printed on the screen
Modular Programming
As programs grow in size it becomes important to break them into separate parts (modules) that communicate with rest of the program through a few well defined interfaces
If we decompose the program into modules well is we can code each module
independently Also if change happens we can localize changes to a particular module without impacting the rest of the programs
For example as is their habit a LCD which we had used in a product went obsolete
We had a written the hardware abstraction layer for the LCD as a separate module We
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 6 of 66
if(expression)
statement sequence
else
statement sequence
If the conditional expression is true the target of the if will be executed otherwise
the target of the else if it exists will be executed At no time will both be executed The
conditional expression controlling the if may be any type of valid C++ expression that produces a true or false result
The following demonstrates the if by playing a simple version of the ―guess the
magic number game The program generates a random numbers prompts for your guess and prints the message Right if you guess the magic number This program also
introduces another C++ library function called rand( ) which returns a randomly selected integer value It requires the ltstdlibgt header
include ltiostreamgt include ltconiohgt
using namespace std
main()
int magic guess
magic = rand()
cout ltlt Enter your guess cin gtgt guess
if (guess == magic) cout ltlt Right
getch()
return 0
This program uses the iflsquo statement to determine whether the userlsquos guess matches the magic number If it does the message is printed on the screen
Modular Programming
As programs grow in size it becomes important to break them into separate parts (modules) that communicate with rest of the program through a few well defined interfaces
If we decompose the program into modules well is we can code each module
independently Also if change happens we can localize changes to a particular module without impacting the rest of the programs
For example as is their habit a LCD which we had used in a product went obsolete
We had a written the hardware abstraction layer for the LCD as a separate module We
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 7 of 66
substituted a different LCD and modified the LCD hardware abstraction module while not
impacting rest of the program
How to achieve a modular programming in C
C provides two keywords static and extern that facilitate this Disciplined coding
practice also aids modularization
The key is to have a header file for each module This header file contains
a comment section about the module definition of all constants publicly exposed by the module
definition of all structures publicly exposed by the module all publicly exposed variables defined with extern
all publicly exposed functions defined with extern
In the header file you should only put definitions of constants structures variables and functions that you want to expose
As a coding practice prefix all constant structure variable and function definitions with
the name of the module This makes it easy to identify the source of definition in a larger program with many modules
The implementation file(s) contains the actual definition of variables and
implementations of the functions defined in the header file
The implementation file also contains definitions of those variables structures and constants that are used only in the implementation file It also contains definitions and
implementations of helper functions These should be declared as static to prevent access from outside I all find it a good programming practice to prefix all internal names with _
Example
Header file for a module named node nodeh
Interface for node module
node_var1 is a variable used inside the module node_do_something() is a function in the module
extern int node_var1
extern int node_do_something(void)
Implementation file for module named node nodec
include nodeh
int node_var1
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 8 of 66
static int _node_var2
static void _node_helper_function(void)
int node_do_something(void)
node_var1 = 2
_node_var2 =35
_node_helper_function()
The main file which uses module node
include nodeh
int main(int argc char argv[])
while(1)
node_do_something()
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 9 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 1 COURSE TOPIC Review of Introduction to C Programming language I Objectives
To learn and understand the basic syntax and script delimeters of C
To understand and use CC++ variables and operators II Part I Basic Syntax of C++
1 Where does the C++ program begin execution __________________________________________________________________________________________________________________________________________________________
2 What is cout __________________________________________________________________________________________________________________________________________________________
3 What does include ltiostreamgt do __________________________________________________________________________________________________________________________________________________________
4 What does the if statement do __________________________________________________________________________________________________________________________________________________________
5 How is block of code created What does it do __________________________________________________________________________________________________________________________________________________________
6 What is a namespace __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that averages the absolute value of five values entered by the user Display the result
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 10 of 66
Chapter 2 amp 3
String Handling Functions
The string handling functions in the standard C++ libraries incorporated from the
standard C libraries do not have a single header file for a source When declaring a
character array that will hold a null-terminated string you need to declare it one character
longer than the largest string that it will hold For example if you want to declare an array
str that could hold a 10-character string
char str[11]
Specifying the size as 11 makes room for the null at the end of the string A string
constant is a list of characters enclosed in double quotes Here are some examples
―hello there ―I like C++ ―Mars ―
It is not necessary to manually add the null terminator onto the end of string
constants the C++ compiler does this for you automatically Therefore the string ―Mars
will appear in memory like this
M a r s 0
The last string shown is This is called a null string It contains only the null
terminator and no other characters Null strings are useful because they represent the
empty string
The easiest way to read a string entered from the keyboard is to use a char array in
a cin statement For example the following program reads a string entered by the user
using cin to read a string from the keyboard
include ltiostreamgt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
cin gtgt str read a string from keyboard lt-- read a string using cin
cout ltlt ―Here is your string ―
cout ltlt str
return 0
Here is a sample run
Enter a string testing
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 11 of 66
Here is your string testing
Although this program is technically correct it will not always work the way you
expect To see why run the program and try entering the string ―This is a test Here is
what you will see
Enter a string This is a test
Here is your string This
When the program redisplays your string it shows only the word ―This not the
entire sentence The reason for this is that the C++ IO system stops reading a string when
the first whitespace character is encountered Whitespace characters include spaces tabs
and newlines
One way to solve the whitespace problem is to use another of C++lsquos library
functions gets( ) The general form of a call to gets( ) is
gets(array-name)
To read a string call gets( ) with the name of the array without any index as its
argument Upon return from gets( ) the array will hold the string input from the keyboard
The gets( ) function will continue to read characters including whitespace until you enter a
carriage return The header used by gets( ) is ltcstdiogt
This version of the preceding program uses gets( ) to allow the entry of strings
containing spaces
Using gets() to read a string from the keyboard
include ltiostreamgt
include ltcstdiogt
using namespace std
int main()
char str[80]
cout ltlt ―Enter a string ―
gets(str) read a string using gets() Read a string using gets()
cout ltlt ―Here is your string
cout ltlt str
return 0
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 12 of 66
Notice that in a cout statement str can be used directly In general the name of a
character array that holds a string can be used any place that a string constant can be used
Keep in mind that neither cin nor gets( ) performs any bounds checking on the array
that receives input Therefore if the user enters a string longer than the size of the array
the array will be overwritten
Some string Library Functions
C++ supports a wide range of string manipulation functions The most common are
strcpy()
strcat()
strcmp()
srtlen()
The string functions all use the same header ltstringgt Letlsquos take a look at these
functions now
strcpy
A call to strcpy( ) takes this general form
strcpy(to from)
The strcpy( ) function copies the contents of the string from into to Remember the
array that forms to must be large enough to hold the string contained in from If it isnlsquot the
to array will be overrun which will probably crash your program
strcat
A call to strcat( ) takes this form strcat(s1 s2) The strcat( ) function appends s2 to
the end of s1 s2 is unchanged You must ensure that s1 is large enough to hold its original
contents and those of s2
strcmp
A call to strcmp( ) takes this general form
strcmp(s1 s2)
The strcmp( ) function compares two strings and returns 0 if they are equal If s1 is
greater than s2 lexicographically (that is according to dictionary order) then a positive
number is returned if it is less than s2 a negative number is returned
The key to using strcmp( ) is to remember that it returns false when the strings
match
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 13 of 66
Therefore you will need to use the operator if you want something to occur when
the strings are equal For example the condition controlling the following if statement is
true when str is equal to ―C++
if(strcmp(str C++)
cout ltlt str is C++
strlen
The general form of a call to strlen( ) is
strlen(s)
Example using strlen
include ltstringhgt
include ltiostreamgt
include ltconiohgt
using namespace std
int main()
char aString1[11] = abcdefghij
aString2[11] = tooShort
aString3[51]
unsigned int len1 len2 len3
cout ltlt endl ltlt endl
cout ltlt Please supply a third string
cingetline(aString3 11) n delimiter assumed
len1 = strlen(aString1)
len2 = strlen(aString2)
len3 = strlen(aString3)
cout ltlt endl ltlt String 1 ltlt aString1 ltlt length =
ltlt len1 ltlt endl ltlt String 2 ltlt aString2
ltlt length = ltlt len2 ltlt endl ltlt String 3
ltlt aString3 ltlt length = ltlt len3
cout ltlt endl ltlt endl
getch()
return 0
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 14 of 66
where s is a string The strlen( ) function returns the length of the string pointed to by s
A String Function Example
The following program illustrates the use of all four string functions
Demonstrate the string functions
include ltiostreamgt
include ltstdiohgt
include ltstringhgt
include ltwindowshgt
include ltconiohgt
using namespace std
int main()
char s1[80]s2[80]
strcpy(s1 C++)
strcpy(s2 is power programming)
cout ltlt lengths ltlt strlen(s1)
cout ltlt ltlt strlen(s2) ltlt n
if(strcmp(s1 s2))
cout ltlt The strings are equaln
else cout ltlt not equaln
strcat(s1 s2)
cout ltlt s1 ltlt n
strcpy(s2 s1)
cout ltlt s1 ltlt and ltlt s2 ltlt n
if(strcmp(s1 s2))
cout ltlt s1 and s2 are now the samen
getch()
return 0
Here is the output
lengths 3 22
not equal
C++ is power programming
C++ is power programming and C++ is power programming
s1 and s2 are now the same
Using the Null Terminator
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 15 of 66
The fact that strings are null-terminated can often be used to simplify various
operations For example the following program converts a string to uppercase
Convert a string to uppercase
include ltiostreamgt
include ltstringhgt
include ltconiohgt
include ltctypehgt
include ltwindowshgt
using namespace std
int main()
char str[80]
int i
strcpy (str this is a test)
for (i=0 str[1] i++)
str[i] = toupper(str[i])
cout ltlt str
getch()
return 0
The output from this program is shown here
THIS IS A TEST
This program uses the library function toupper() which returns the uppercase
equivalent of its character argument to convert each character in the string The upper()
function uses the header ltctypehgt
Notice that the test condition of the for loop is simply the array indexed by the
condition variable The reason this works is that a true value is any non-zero value
Remember all character values are non-zero but the null terminating the string is zero
Because the null terminator marks the end of the string the loop stops precisely where it is
supposed to
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 16 of 66
Table 1 Character functions in ltctypehgt
Function Function Signature
Description
isalnum() int isalnum(int c) Returns a non-zero if c is alphabetic or numeric
isalpha() int isalpha(int c) Returns a non-zero if c is alphabetic
iscntrl() int iscntrl(int c) Returns a non-zero if c is a control character
isdigit() int isdigit(int c) Returns a non-zero if c is a digit 0 - 9
isgraph() int isgraph(int c) Returns a non-zero if c is a non-blank but printing character
islower() int islower(int c) Returns a non-zero if c is a lower case alphabetic character ie a - z
isprint() int isprint(intc) Returns a non-zero if c is printable non-blanks and white
space included
ispunct() int ispunct(int c) Returns a non-zero if c is a printable character but not alpha numeric or blank
isspace() int isspace(int c) Returns a non-zero for blanks and these escape sequences
f n r t and v
isupper() int isupper(int c) Returns a non-zero if c is an upper-case alphabetic character
ie A - Z
isxdigit() int isxdigit(int c) Returns a non-zero if c is a hexadecimal character 0 - 9 a - f or A - F
tolower() int tolower(int c) Returns the lower case version if c is an upper case character
otherwise returns c
toupper() int toupper(int c) Returns the upper case version if c is a lower case character otherwise returns c
Table 2 Some String Handling Functions in ltstringhgt
Functions Function Signature Description
strcat() char strcat(char s1
const char s2) Adds string s2 onto the end of s1 (conCATenation)
strchr() char strchr(const char
s int c)
Returns a pointer to the first occurrence of c in
string s Returns NULL if c is not found in s
strcmp() int strcmp(const char
s1 const char s2)
Compares s1 and s2 alphabetically Returns a negative zero or positive number depending on
whether s1 is before the same as or after s2 if you
were alphabetizing s1 and s2
strcpy() char strcpy(char s1
const char s2) Copies s2 into s1 and returns a point to s1
strlen() size_t strlen(const char s)
Returns the number of characters in the string s starting at s[0] and ending before the first NULL
strncat() char strncat(char s1
const char s2 size_t n)
Tacks on the first n characters of s2 onto s1 A
pointer to s1 is returned
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 17 of 66
strncmp() int strncmp(const char s1 const char s2 size_t
n)
Compares s1 with the first n characters of s2 Returns a negative zero or positive integer (just like
strcmp)
strncpy() char strncpy(char s1 const chars2 size_t n)
Copies the first n characters of s2 into the first n characters of s1
strrchr() char strrchr(const
chars int c)
Returns a pointer to the last occurence of c in string
s (Compare with strchr())
strstr() char strstr(const char
s1 const char s2)
Returns the address of the first occurence of string s2 that is also in string s1 Returns NULL if s2 is not
found in s1
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 18 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 2 COURSE TOPIC String and Handling Function I Objectives To know the String handling function used
Part II String Handling Functions 1 amp 2
1 What is a null-terminated string __________________________________________________________________________________________________________________________________________________________
2 To hold a string that is 18 characters long how must the character array be __________________________________________________________________________________________________________________________________________________________
3 Show how to initialize a four-element array of int to the values 123 and 4 __________________________________________________________________________________________________________________________________________________________
4 How can this initialization be rewritten char str[6] = lsquoHrsquo lsquoersquo lsquolrsquo lsquolrsquo lsquoorsquo lsquoOrsquo)
__________________________________________________________________________________________________________________________________________________________
5 Rewrite the following as an unsized array Int nums[4] = 44 55 66 77
__________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points) 1 Write a program that prompts the user for two strings and then compares the strings for equality
but ignores case differences Thus ldquookrdquo and ldquoOKrdquo will compare as equal
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 19 of 66
Chapter 4
Introduction to Pointers
A pointer is an object that contains a memory address Very often this address is the
location of another object such as a variable For example if x contains the address of y
then x is said to ―point to y
Pointer variables must be declared as such The general form of a pointer variable
declaration is
type var-name
Here type is the pointerlsquos base type The base type determines what type of data
the pointer will be pointing to var-name is the name of the pointer variable For example
to declare ip to be a pointer to an int use this declaration
int ip
Since the base type of ip is int it can be used to point to int values Here a float
pointer is declared
float fp
In this case the base type of fp is float which means that it can be used to point to
a float value
In general in a declaration statement preceding a variable name with an causes
that variable to become a pointer
The Pointer Operator
There are two special operators that are used with pointers and amp The amp is a
unary operator that returns the memory address of its operand
For example
ptr = amptotal
puts into ptr the memory address of the variable total This address is the location of
total in the computerlsquos internal memory It has nothing to do with the value of total The
operation of amp can be remembered as returning ―the address of the variable it precedes
Therefore the preceding assignment statement could be verbalized as ―ptr receives the
address of total To better understand this assignment assume that the variable total is
located at address 100 Then after the assignment takes place ptr has the value 100 The
second operator is and it is the complement of amp It is a unary operator that returns the
value of the variable located at the address specified by its operand Continuing with the
same example if ptr contains the memory address of the variable total then
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 20 of 66
val = ptr
will place the value of total into val For example if total originally had the value
3200 then val will have the value 3200 because that is the value stored at location 100
the memory address that was assigned to ptr The operation of can be remembered as ―at
address In this case then the statement could be read as ―val receives the value at
address ptr
The following program executes the sequence of the operations just described
include ltiostreamgt
using namespace std
int main()
int total
int ptr
int val
total = 3200 assign 3200 to total
ptr = amptotal get address of total
val = ptr get value at that address
cout ltlt Total is ltlt val ltlt n
return 0
It is unfortunate that the multiplication symbol and the ―at address symbol are the
same This fact sometimes confuses newcomers to the C++ language These operators
have no relationship to each other Keep in mind that both amp and have a higher
precedence than any of the arithmetic operators except the unary minus with which they
have equal precedence The act of using a pointer is often called indirection because you are
accessing one variable indirectly through another variable
The Base Type of a Pointer
In the preceding discussion you saw that it was possible to assign val the value of
total indirectly through a pointer At this point you may have thought of this important question How does C++ know how many bytes to copy into val from the address pointed
to by ptr Or more generally how does the compiler transfer the proper number of bytes for any assignment involving a pointer The answer is that the base type of the pointer
determines the type of data upon which the pointer operates In this case because ptr is an
int pointer four bytes of information are copied into val (assuming a 32-bit int) from the address pointed to by ptr However if ptr had been a double pointer for example then
eight bytes would have been copied
It is important to ensure that pointer variables always point to the correct type of data For example when you declare a pointer to be of type int the compiler assumes that
anything it points to will be an integer variable If it doesnlsquot point to an integer variable then trouble is usually not far behind For example the following fragment is incorrect
int p double f p = ampf ERROR
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 21 of 66
This fragment is invalid because you cannot assign a double pointer to an integer pointer That is ampf generates a pointer to a double but p is a pointer to an int These two
types are not compatible (In fact the compiler would flag an error at this point and not compile your program) Although two pointers must have compatible types in order for one
to be assigned to another you can override this restriction (at your own risk) using a cast For example the following fragment is now technically correct
int p double f p = (int ) ampf Now technically OK
The cast to int causes the double pointer to be converted to an integer pointer However to use a cast for this purpose is questionable practice The reason is that the base
type of a pointer determines how the compiler treats the data it points to In this case even though p is actually pointing to a floating-point value the compiler still ―thinks that p is
pointing to an int (because p is an int pointer)
To better understand why using a cast to assign one type of pointer to another is not usually a good idea consider the following short program
This program will not work right include ltiostreamgt
using namespace std
int main()
double xy int p
x = 12323 p = (int ) ampx use cast to assign double to int
y = p what will this do
cout ltlt y what will this print
return 0
Here is the output produced by the program (You might see a different value)
137439e+009
This value is clearly not 12323 Here is why In the program p (which is an integer
pointer) has been assigned the address of x (which is a double) Thus when y is assigned the value pointed to by p y receives only four bytes of data (and not the eight required for
a double value) because p is an integer pointer Therefore the cout statement displays not 12323 but a garbage value instead
Assigning value to pointers
You can use a pointer on the left-hand side of an assignment statement to assign a value to the location pointed to by the pointer Assuming that p is an int pointer this
assigns the value 101 to the location pointed to by p
p = 101
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 22 of 66
You can verbalize this assignment like this ―At the location pointed to by p assign the value 101 To increment or decrement the value at the location pointed to by a pointer
you can use a statement like this
(p)++
The parentheses are necessary because the operator has lower precedence than does the ++ operator
The following program demonstrates an assignment through a pointer
include ltiostreamgt
using namespace std
int main()
int p num
p = ampnum
p = 100 assign num the value 100 through p cout ltlt num ltlt
(p)++ increment num through p cout ltlt num ltlt
(p)-- decrement num through p cout ltlt num ltlt nlsquo
return 0
The output from the program is shown here
100 101 100
Pointer Expressions
Pointers can be used in most C++ expressions However some special rules apply
Remember also that you may need to surround some parts of a pointer expression with parentheses in order to ensure that the outcome is what you desire
Pointer Arithmetic There are only four arithmetic operators that can be used on
pointers ++ ndash ndash + and ndash To understand what occurs in pointer arithmetic let p1 be an int pointer with a current value of 2000 (that is it contains the address 2000) Assuming
32-bit integers after the expression
p1++
The contents of p1 will be 2004 not 2001 The reason for this is that each time p1
is incremented it will point to the next int The same is true of decrements For example again assuming that p1 has the value 2000 the expression
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 23 of 66
p1--
causes p1 to have the value 1996
Generalizing from the preceding example the following rules apply to pointer
arithmetic Each time that a pointer is incremented it will point to the memory location of the next element of its base type Each time it is decremented it will point to the location of
the previous element of its base type In the case of character pointers an increment or decrement will appear as ―normal arithmetic because characters are one byte long
However every other type of pointer will increase or decrease by the length of its base
type You are not limited to only increment and decrement operations You can also add or subtract integers to or from pointers The expression
p1 = p1 + 9
makes p1 point to the ninth element of p1lsquos base type beyond the one to which it is
currently pointing
Although you cannot add pointers you can subtract one pointer from another
(provided they are both of the same base type) The remainder will be the number of elements of the base type that separate the two pointers
Other than addition and subtraction of a pointer and an integer or the subtraction of
two pointers no other arithmetic operations can be performed on pointers For example you cannot add or subtract float or double values to or from pointers
To graphically see the effects of pointer arithmetic execute the next short program
It creates an int pointer (i) and a double pointer (f) It then adds the values 0 through 9 to
these pointers and displays the results Observe how each address changes relative to its base type each time the loop is repeated (For most 32-bit compilers i will increase by 4s
and f will increase by 8s) Notice that when using a pointer in a cout statement its address is automatically displayed in the addressing format applicable to the CPU and environment
include ltiostreamgt
using namespace std
int main()
int I j[10]
double f g[10] int x
i = j
f = g
for (x=0 xlt10 x++)
cout ltlt i+x ltlt ltlt f+x ltlt nlsquo display the addresses produced by adding x
to each pointer
Here is a sample run (The precise values you see may differ from these)
0012FE5C 09012FE84
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 24 of 66
0012FE60 0012FE8C
0012FE64 0012FE94 0012FE68 0012FE9C
0012FE6C 0012FEA4 0012FE70 0012FEAC
0012FE74 0012FEB4 0012FE78 0012FEBC
0012FE7C 0012FEC4
0012FE80 0012FECC
Pointer Comparisons
Pointers may be compared using the relational operators such as == lt and gt In general for the outcome of a pointer comparison to be meaningful the two pointers must
have some relationship to each other For example both may point to elements within the same array There is however one other type of pointer comparison any pointer can be
compared to the null pointer which is zero
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 25 of 66
I Objectives To identify the use of Pointers in C and its use
II Basic Information Scenario Answer the following using Pointers
1 What is a pointer
__________________________________________________________________________________________________________________________________________________________
2 Show how to declare a long int pointer called valPtr __________________________________________________________________________________________________________________________________________________________
3 As they relate to pointers what do the and amp operators do __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
6 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
7 What are two pointer operators __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 26 of 66
Chapter 5
Pointers and Arrays
In C++ there is a close relationship between pointers and arrays In fact frequently a pointer and an array are interchangeable Consider this fragment
char str[80] char p1
p1 = str
Here str is an array of 80 characters and p1 is a character pointer However it is the third line that is of interest In this line p1 is assigned the address of the first element in
the str array (That is after the assignment p1 will point to str[0]) Herelsquos why In C++ using the name of an array without an index generates a pointer to the first element in the
array Thus the assignment
p1 = str
assigns the address of str[0] to p1 This is a crucial point to understand When an
unindexed
array name is used in an expression it yields a pointer to the first element in the array Since after the assignment p1 points to the beginning of str you can use p1 to
access
elements in the array For example if you want to access the fifth element in str you can use
str[4]
or
(p1+4)
Both statements obtain the fifth element Remember array indices start at zero so when str is indexed a 4 is used to access the fifth element A 4 is also added to the pointer
p1 to get the fifth element because p1 currently points to the first element of str
The parentheses surrounding p1+4 are necessary because the operation has a
higher priority than the + operation Without them the expression would first find the value pointed to by p1 (the first location in the array) and then add 4 to it In effect C++ allows
two methods of accessing array elements pointer arithmetic and array indexing This is important because pointer arithmetic can sometimes be faster than array indexingmdash
especially when you are accessing an array in strictly sequential order Since speed is often a consideration in programming the use of pointers to access array elements is very
common in C++ programs Also you can sometimes write tighter code by using pointers
instead of array indexing
Here is an example that demonstrates the difference between using array indexing and pointer arithmetic to access the elements of an array We will create two versions of a
program that reverse the case of letters within a string The first version uses array indexing The second uses pointer arithmetic The first version is shown here
Reverse case using array indexing
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 27 of 66
include ltiostreamgt
include ltctypehgt using namespace std
int main()
int i char str[80] = This Is A Test
cout ltlt Original string ltlt str ltlt n
for(i = 0 str[i] i++)
if(isupper(str[i])) str[i] = tolower(str[i]) else if(islower(str[i])) str[i] = toupper(str[i])
cout ltlt Inverted-case string ltlt str
return 0
The output from the program is shown here
Original string This Is A Test Inverted-case string tHIS iS a tEST
Notice that the program uses the isupper( ) and islower( ) library functions to determine the case of a letter The isupper( ) function returns true when its argument is an
uppercase letter islower( ) returns true when its argument is a lowercase letter Inside the for loop str is indexed and the case of each letter is checked and changed The loop
iterates until the null terminating str is indexed Since a null is zero (false) the loop stops
Here is the same program rewritten to use pointer arithmetic
Reverse case using array indexing
include ltiostreamgt include ltctypehgt using namespace std
int main()
int i char str[80] = ―This Is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
for i = 0 str[i] i++) if (iupper(str[i]))
else if (islower(str[i])) str[i] = toupper(str[i]
cout ltlt ―Inverted-case string ― ltlt str return 0
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 28 of 66
In this version p is set to the start of str Then inside the while loop the letter at p
is checked and changed and then p is incremented The loop stops when p points to the null terminator that ends str Because of the way some C++ compilers generate code these
two programs may not be equivalent in performance Generally it takes more machine instructions to index an array than it does to perform arithmetic on a pointer Consequently
in professionally written C++ code it is common to see the pointer version used more frequently However as a beginning C++ programmer feel free to use array indexing until
you are comfortable with pointers
Indexing a Pointer
As you have just seen it is possible to access an array using pointer arithmetic
What you might find surprising is that the reverse is also true In C++ it is possible to index a pointer as if it were an array Here is an example It is a third version of the case-
changing program
index a pointer as if it were an array
include ltiostreamgt
include ltctypehgt
using namespace std
main()
char p int i
char str[80]=This is A Test
cout ltlt ―Original string ― ltlt str ltlt ―n
p = str assign the p address of the start of the array now index p
for (I = 0 p[i] i++)
if (isupper(p[i])) p[i] = tolowerp[i])
else if (islower(p[i])
p[i] = toupper(p[i])
cout ltlt ―Inverted ndash case string lt str
return 0
The program creates a char pointer called p and then assigns to that pointer the
address of the first element in str Inside the for loop p is indexed using the normal array indexing syntax This is perfectly valid because in C++ the statement p[i] is function
functionally identical to (p+i) This further illustrates the close relationship between pointers and arrays
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 29 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 4 COURSE TOPIC Pointers and Arrays I Objectives To identify the use of Pointers and Arrays using C
II Tasks Procedure Instructions Answer the following questions
1 Can an array be accessed through a pointer __________________________________________________________________________________________________________________________________________________________
2 Can a pointer be indexed as if it were an array __________________________________________________________________________________________________________________________________________________________
3 An array name used by itself with no index yields what __________________________________________________________________________________________________________________________________________________________
4 All pointer arithmetic is performed relative to the _____ of the pointer __________________________________________________________________________________________________________________________________________________________
5 Assuming the double is 8 bytes long when a double pointer is incremented by how much is its value increased __________________________________________________________________________________________________________________________________________________________
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 30 of 66
Chapter 6
Pointers and String
Strings and Constants
You might be wondering how string constants like the one in the fragment shown
here are handled by C++
cout ltlt strlen(Xanadu)
The answer is that when the compiler encounters a string constant it stores it in the
programlsquos string table and generates a pointer to the string Thus ―Xanadu yields a pointer to its entry in the string table Therefore the following program is perfectly valid and prints
the phrase Pointers add power to C++
include ltiostreamgt
using namespace std
int main()
char ptr
ptr = ―Pointers add power to C++ n ptr is assigned the address of this string constant
cout ltlt ptr
return 0
In this program the characters that make up a string constant are stored in the string table and ptr is assigned a pointer to the string in that table
Since a pointer into your programlsquos string table is generated automatically whenever
a string constant is used you might be tempted to use this fact to modify the contents of the string table However this is usually not a good idea because many C++ compilers
create optimized tables in which one string constant may be used at two or more different
places in your program Thus changing a string may cause undesired side effects
Reversing a String in Place
Earlier it was mentioned that comparing one pointer to another is meaningful only if the two pointers point to a common object such as an array Now that you understand how
pointers and arrays relate you can apply pointer comparisons to streamline some types of algorithms In this project you will see an example The program developed here reverses
the contents of a string in place Thus instead of copying the string back-to-front into
another array it reverses the contents of the string inside the array that holds it The program uses two pointer variables to accomplish this One initially points to the beginning
of a string and the other initially points to the last character in the string A loop is set up that continues to run as long as the start pointer is less than the end pointer Each time
through the loop the characters pointed to by the pointers are swapped and the pointers are advanced When the start pointer is greater than or equal to the end pointer the string
has been reversed Step by step
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 31 of 66
1 Create a file called StrRevcpp 2 Begin by adding these lines to the file
Reverse a string in place
include ltiostreamgt
include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test
char start end int len
char t
The string to be reversed is contained in str The pointers start and end will be used
to access the string
3 Add these lines which display the original string obtain the stringlsquos length and set the initial values for the start and end pointers
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
Notice that end points to the last character in the string not the null terminator
4 Add the code that reverse the string
while (start lt end) swap chars
t = starts
starts = end end = t
advance pointers
starts++ end--
The process works like this As long as the start pointer points to a memory
location that is less than the end pointer the loop iterates Inside the loop the characters being pointed to by start and end are swapped Then start is incremented
and end is decremented When end is greater than or equal to start all of the characters in the string have been reversed Since both start and end point into the
same array their comparison is meaningful
5 Here is the complete StrRevcpp program
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 32 of 66
Reverse a string in place
include ltiostreamgt include ltstringhgt
using namespace std
int main()
char str[ ] = ―this is a test char start end
int len char t
cout ltlt ―Original ― ltlt str ltlt ―n
len = str(str)
start = strend=ampstr[len-1]
while (start lt end) swap chars
t = starts starts = end
end = t
advance pointers
starts++ end--
The output from the program is shown here Original this is a test Reversed
tset a si siht
Arrays of Pointers
Pointers can be arrayed like any other data type For example declaration for an int
pointer array of size 10 is
int p[10]
Here pi is an array of ten integer pointers To assign the address of an int variable
called var to the third element of the pointer array you would write
int var
fpi[2] = ampvar
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 33 of 66
Remember pi is an array of int pointers The only thing that the array elements can
hold are the addresses of integer valuesmdashnot the values themselves To find the value of var you would write
pi[2]
Like other arrays arrays of pointers can be initialized A common use for initialized
pointer arrays is to hold pointers to strings Here is an example that uses a two-dimensional array of character pointers to implement a small dictionary
Here is a sample run
Enter word network
An interconnected group of computers
When the array dictionary is created it is initialized with a set of words and their
meanings Recall C++ stores all string constants in the string table associated with your program so the array need only store pointers to the strings The program works by testing
the word entered by the user against the strings stored in the dictionary If a match is found the meaning is displayed If no match is found an error message is printed Notice
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 34 of 66
that dictionary ends with two null strings These mark the end of the array Recall that a
null string contains only the terminating null character The for loop runs until the first character in a string is null This condition is tested with this expression
dictionary[i][0]
The array indices specify a pointer to a string The obtains the character at that
location If this character is null then the expression is false and the loop terminates Otherwise the expression is true and the loop continues
The Null Pointer Convention
After a pointer is declared but before it has been assigned it will contain an arbitrary value Should you try to use the pointer prior to giving it a value you will probably
crash your program While there is no sure way to avoid using an uninitialized pointer C++ programmers have adopted a procedure that helps prevent some errors By convention if a
pointer contains the null (zero) value it is assumed to point to nothing Thus if all unused pointers are given the null value and you avoid the use of a null pointer you can avoid the
accidental misuse of an uninitialized pointer This is a good practice to follow
Any type of pointer can be initialized to null when it is declared For example the
following initializes p to null
float p = 0 p is now a null pointer
To check for a null pointer use an if statement like one of these
if(p) succeeds if p is not null
if(p) succeeds if p is null
Multiple Indirection
A pointer to a pointer is a form of multiple indirection or a chain of pointers Consider Figure 4-2 As you can see in the case of a normal pointer the value of the
pointer is the address of a value In the case of a pointer to a pointer the first pointer
contains the address of the second pointer which points to the location that contains the desired value Multiple indirection can be carried on to whatever extent desired but there
are few cases where more than a pointer to a pointer is needed or indeed even wise to use Excessive indirection is difficult to follow and prone to conceptual errors
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 35 of 66
COURSE TITLE ITEC223 ndash Advance Programming EXERCISE NUMBER 5 COURSE TOPIC Pointers and String I Objectives To know how is Pointers and String worked using C II Tasks Procedure Instructions Asnwer the following question
1 What is it called when one pointer points to another pointer __________________________________________________________________________________________________________________________________________________________
2 Of what significant is a null pointer in C++ __________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
1 Write a program that counts the uppercase letters in a string Have it display the result
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 36 of 66
Chapter 7
Structures in Arrays Functions and Pointers
What is a Structure
Structure is a collection of variables under a single name Variables can be of any type int float char etc The main difference between structure and array is that arrays are
collections of the same data type and structure is a collection of variables under a single name
Declaring a Structure
The structure is declared by using the keyword struct followed by structure name
also called a tag Then the structure members (variables) are defined with their type and variable names inside the open and close braces and Finally the closed braces end with
a semicolon denoted as following the statement The above structure declaration is also called a Structure Specifier
Example
Three variables custnum of type int salary of type int commission of type float are structuremembers and the structure name is Customer This structure is declared as
follows
In the above example it is seen that variables of different types such as int and float are
grouped in a single structure name Customer
Arrays behave in the same way declaring structures does not mean that memory is
allocated Structure declaration gives a skeleton or template for the structure
After declaring the structure the next step is to define a structure variable
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 37 of 66
How to declare Structure Variable
This is similar to variable declaration For variable declaration data type is defined followed
by variable name For structure variable declaration the data type is the name of the structure followed by thestructure variable name
In the above example structure variable cust1 is defined as
What happens when this is defined When structure is defined it allocates or reserves space in memory The memory space allocated will be cumulative of all
defined structure members In the above example there are 3 structure members
custnum salary and commission Of these two are of type int and one is of type float If integer space allocated by a system is 2 bytes and float four bytes the above would
allocate 2bytes for custnum 2 bytes for salary and 4 bytes for commission
How to access structure members in C++
To access structure members the operator used is the dot operator denoted by () The
dot operatorfor accessing structure members is used thusly
structure variable namemember name
For example
To assign 2000 for the structure member salary in the above example of structure
Customer with structure variable cust1 this is written as
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 38 of 66
CHAPTER 8
Pointers to structures
All that we have discussed so far has been OK but runs into problems when structures have
to be moved between functions for the following reasons
if the structure is large it is more efficient to pass a pointer to the structure instead of the structure its self This techniquepri is also used to pass pointers to
arrays between functions
When passing a structure to a function you actually pass a COPY of the structure Therefore it is not possible to change the values of members within the structure as
the copy is destroyed when the function ends
Here is an example (these are 2 examples the one to the left uses a pointer)
| |
struct x int a int b int c | struct x int a int b int c
| void function(struct x) | void function(struct x )
| main() | main()
| struct x z | struct x z pz 3
| pz = ampz 4 za = 10 1 | za = 10
za++ | za++
| function(z) 2 | function(pz) 5
| |
void function( struct x z) | void function(struct x pz) | 6
printf( first member d n za) | printf( first member d n (pz)a) |
|
Here is the annotation
1 Give a structure member a value 2 Pass a COPY of the whole structure to the function
3 Define pz a pointer to a structure of type x
4 Put the address of z into pz pz now POINTS to z PLEASE NOTE z is defined to reserve memory equal to the size of the structure pz only holds an address so will
be 4 bytes long 5 Pass the pointer into the function
6 Print the value of the member a
The (pz)a syntax is used a great deal in C and it was decided to create a short hand for
it So
(pz)a == pz-gta
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 39 of 66
CHAPTER 9
Structures and Arrays
include ltiostreamgt
include ltfstreamhgt include ltstringhgt
using namespace std
ofstream outData
input file structure ifstream inData
char menu_id[10] char menu_name[10]
char menu_col[10]
char menu_row[10] char button_id[10]
char button_label_1[10] char button_label_2[10]
char button_label_3[10] char button_col[10]
char button_row[10]
menu file structure
struct menu
int mid char name[20]
int mcol int mrow
int bid char blabel[24]
int bcol
int brow
List of menus
enum menu_id
MAIN = 1
Define Main menu
menu Main_menu[3]
void createMenu(menu newMenu[] int menu_num MAS_Configure_Button_Request_Messagemsg )
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 40 of 66
int y = 0
while ((inDatagetline(menu_id10 $)eof()) ampamp (atoi(menu_id) == menu_num))
newMenu[y]mid= atoi(menu_id)
inDatagetline(menu_name 10 $)
newMenu[y]name[0] = 0
strcpy(newMenu[y]namemenu_name) outData ltlt Main Menu Name ltlt newMenu[y]name ltlt
inDatagetline( menu_col 10 $)
newMenu[y]mcol = atoi(menu_col)
inDatagetline( menu_row 10 $) newMenu[y]mrow = atoi(menu_row)
inDatagetline( button_id 10 $) newMenu[y]bid = atoi(button_id)
inDatagetline( button_label_1 10 $)
inDatagetline( button_label_2 10 $) inDatagetline( button_label_3 10 $)
newMenu[y]blabel[0] = 0 strcpy(newMenu[y]blabelbutton_label_1)
strcat(newMenu[y]blabelbutton_label_2)
strcat(newMenu[y]blabelbutton_label_3) outData ltlt newMenu[y]blabel ltlt
inDatagetline( button_col 10 $)
newMenu[y]bcol = atoi(button_col)
inDatagetline( button_row 10 n)
newMenu[y]brow = atoi(button_row) y++
int main()
int loop
inDataopen(datatxt) if (inData)
cout ltlt Problem with opening datatxt End program ltlt endl
return(1)
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 41 of 66
outDataopen(testtxt) if (outData)
cout ltlt Problem with opening testtxt End program ltlt endl
return(2)
createMenu(Main_menu MAIN msg) for (loop = 0 loop lt 3 loop ++)
outData ltlt Main menu ltlt Main_menu[loop]bid ltlt endl outData ltlt Main menu ltlt Main_menu[loop]blabel ltlt endl
inDataclose()
outDataclose()
return 0
CHAPTER EXERCISES
Example1 A Simple use of structures
Herelsquos a program that uses a struct variable to manage the records in the given file
Andy DeGeneres Math 98
Gail Stevens English 100
Lia Jacobs Science 99
include ltiostreamhgt
struct record
char fname[10]
char lname[10]
char subject[10] int grades
record stud record has become like a variable that we can use to define the stud variable char n1[10]
char n2[10] char s[10]
int gr
main()
this is how you assign a value to struct elements
recordfname = ―Andy
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 42 of 66
recordlname = ―DeGeneres
recordsubject = ―Math recordgrade = 98
this is how you assign an inputted value to struct elements
coutltltEnter a First Name
cingtgtn1 coutltltEnter a Last Name
cingtgtn2
coutltltEnter a subject cingtgts
coutltltEnter a grade cingtgtgr
recordfname = n1
recordlname = n2 recordsubject = s
recordgrade = gr
this is how you retrieve values from a struct
coutltntStudent 1
coutltltnt FnamettLnamettSubjectttGrade coutltltntltltrecordfnameltlttt ltltrecordlname
coutltlttt ltltrecordsubjectltlttt ltltrecordgrade
End of Example 1
Example2 Stuctures Pointers and Functions
struct x int a int b int c Declare the structure
void function(struct x ) the function prototype
main()
Declare two variables
z == type struct x pz == a pointer to type struct x
struct x z pz
pz = ampz put the address of z into pz za = 10 initialize za
za++ Increment za
print the contents of za using the pointer pz
printf( first member before the function call d n pz-gta)
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 43 of 66
Call function passing the pointer pz
function(pz)
Print the NEW value of za using three different notations
printf( first member after the function call d n pz-gta) printf( first member after the function call d n (pz)a)
printf( first member after the function call d n za)
void function(struct x pz)
Print the value of za by referencing the pointer pz
which holds the address of z
printf( first member inside the function d n pz-gta)
Increment the value of za this is the source location
in memory pz-gta++
End of Example 2
Example 3 Arrays and Structures
include ltiostreamhgt
Declare a structure It MUST be declared before use
struct record_format
char name[20] int age
main ()
int count=0
struct record_format record[]=
Joe Brown 21
James Dean 34 David Williams 54
Neil Harrison 62 EOF -1
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 44 of 66
Print the contents of the structure
while( record[count]age = -1)
coutltltname is s tage is d n record[count]name record[count]age
count++
Program will produce
name is Joe Brown age is 21 name is James Dean age is 34
name is David Williams age is 54
name is Neil Harrison age is 62
End of Example 3
CHAPTER QUIZ
COURSE TOPIC Applying Structures in Functions Pointers and Arrays III Objectives
To learn and understand how to declare a structure
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 45 of 66
To understand and use structures with the previously learned constructs particularly pointers functions and arrays
IV Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
7 What is the syntax in declaring a structure ____________________________________________________________________________________________________________________________________________________________________
8 What is the use of the dot () operator ____________________________________________________________________________________________________________________________________________________________________
9 How do you display the content a structure element (you may use an example to answer this) ____________________________________________________________________________________________________________________________________________________________________
10 How do you declare an array of structures ____________________________________________________________________________________________________________________________________________________________________
11 What is a member ____________________________________________________________________________________________________________________________________________________________________
12 True or False A structure once declared is used similarly to variables Show an example _________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
2 Write a program that defines a structure to add two fractions together
CHAPTER 10
File Handling
What is a File
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 46 of 66
Abstractly a file is a collection of bytes stored on a secondary storage device which
is generally a disk of some kind The collection of bytes may be interpreted for example as characters words lines paragraphs and pages from a textual document fields and records
belonging to a database or pixels from a graphical image The meaning attached to a particular file is determined entirely by the data structures and operations used by a
program to process the file It is conceivable (and it sometimes happens) that a graphics file will be read and displayed by a program designed to process textual data The result is that
no meaningful output occurs (probably) and this is to be expected A file is simply a machine decipherable storage media where programs and data are stored for machine
usage
Essentially there are two kinds of files that programmers deal with text files and binary files These two classes of files will be discussed in the following sections
ASCII Text files
A text file can be a stream of characters that a computer can process sequentially It
is not only processed sequentially but only in forward direction For this reason a text file is usually opened for only one kind of operation (reading writing or appending) at any given
time
Similarly since text files only process characters they can only read or write data
one character at a time (In C Programming Language Functions are provided that deal with lines of text but these still essentially process data one character at a time) A text
stream in C is a special kind of file Depending on the requirements of the operating system
newline characters may be converted to or from carriage-returnlinefeed combinations depending on whether data is being written to or read from the file Other character
conversions may also occur to satisfy the storage requirements of the operating system These translations occur transparently and they occur because the programmer has
signalled the intention to process a text file
Binary files
A binary file is no different to a text file It is a collection of bytes In C Programming Language a byte and a character are equivalent Hence a binary file is also referred to as a
character stream but there are two essential differences 1 No special processing of the data occurs and each byte of data is transferred to or
from the disk unprocessed 2 C Programming Language places no constructs on the file and it may be read from
or written to in any manner chosen by the programmer
Binary files can be either processed sequentially or depending on the needs of the application they can be processed using random access techniques In C Programming
Language processing a file using random access techniques involves moving the current file position to an appropriate place in the file before reading or writing data This indicates a
second characteristic of binary files is that they are generally processed using read and write operations simultaneously
For example a database file will be created and processed as a binary file A record
update operation will involve locating the appropriate record reading the record into
memory modifying it in some way and finally writing the record back to disk at its
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 47 of 66
appropriate location in the file These kinds of operations are common to many binary files
but are rarely found in applications that process text files
Creating a file and output some data
In order to create files we have to learn about File IO ie how to write data into a
file and how to read data from a file We will start this section with an example of writing data to a file We begin as before with the include statement for stdioh then define some
variables for use in the example including a rather strange looking new type
EXAMPLE
Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
The type FILE is used for a file variable and is defined in the stdioh file It is used to define
a file pointer for use in file operations Before we can write to a file we must open it What
this really means is that we must tell the system that we want to write to a file and what the file name is We do this with the fopen() function illustrated in the first line of the
program The file pointer fp in our case points to the file and two arguments are required in the parentheses the file name first followed by the file type
The file name is any valid DOS file name and can be expressed in upper or lower case letters or even mixed if you so desire It is enclosed in double quotes For this example we
have chosen the name TENLINESTXT This file should not exist on your disk at this time If you have a file with this name you should change its name or move it because when we
execute this program its contents will be erased If you donlsquot have a file by this name that
is good because we will create one and put some data into it You are permitted to include a directory with the file nameThe directory must of course be a valid directory otherwise an
error will occur Also because of the way C handles literal strings the directory separation character must be written twice For example if the file is to be stored in the PROJECTS
sub directory then the file name should be entered as ―PROJECTSTENLINESTXT The second parameter is the file attribute and can be any of three letters r w or a and must
be lower case
Reading (r)
When an r is used the file is opened for reading a w is used to indicate a file to be used for writing and an a indicates that you desire to append additional data to the data
already in an existing file Most C compilers have other file attributes available check your
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 48 of 66
Reference Manual for details Using the r indicates that the file is assumed to be a text file
Opening a file for reading requires that the file already exist If it does not exist the file pointer will be set to NULL and can be checked by the program
EXAMPLE
Here is a small program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Writing (w)
When a file is opened for writing it will be created if it does not already exist and it
will be reset if it does resulting in the deletion of any data already there Using the w indicates that the file is assumed to be a text file
EXAMPLE
Here is the program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Appending (a)
When a file is opened for appending it will be created if it does not already exist and it will be initially empty If it does exist the data input point will be positioned at the end of
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 49 of 66
the present data so that any new data will be added to any data that already exists in the
file Using the a indicates that the file is assumed to be a text file
Here is a program that will add text to a file which already exists and there is some text in
the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxta)
fprintf(fpsThis is just an example )) append some text
fclose(fp)
return 0
Outputting to the file
The job of actually outputting to the file is nearly identical to the outputting we have
already done to the standard output device The only real differences are the new function
names and the addition of the file pointer as one of the function arguments In the example program fprintf replaces our familiar printf function name and the file pointer defined
earlier is the first argument within the parentheses The remainder of the statement looks like and in fact is identical to the printf statement
Closing a file
To close a file you simply use the function fclose with the file pointer in the parentheses Actually in this simple program it is not necessary to close the file because
the system will close all open files before returning to DOS but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically
because that would act as a reminder to you of what files are open at the end of each program
You can open a file for writing close it and reopen it for reading then close it and open it again for appending etc Each time you open it you could use the same file pointer
or you could use a different one The file pointer is simply a tool that you use to point to a file and you decide what file it will point to Compile and run this program When you run it
you will not get any output to the monitor because it doesnacirceurotradet generate any After running it look at your directory for a file named TENLINESTXT and type it that is where
your output will be Compare the output with that specified in the program they should agree Do not erase the file named TENLINESTXT yet we will use it in
some of the other examples in this section
Reading from a text file
Now for our first program that reads from a file This program begins with the familiar include some data definitions and the file opening statement which should require
no explanation except for the fact that an r is used here because we want to read it
include ltstdiohgt
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 50 of 66
main( )
FILE fp
char c
funny = fopen(TENLINESTXT r)
if (fp == NULL)
printf(File doesnt existn)
else
do
c = getc(fp) get one character from the file
putchar(c) display it on the monitor
while (c = EOF) repeat until EOF (end of file)
fclose(fp)
In this program we check to see that the file exists and if it does we execute the main
body of the program If it doesnlsquot we print a message and quit If the file does not exist the system will set the pointer equal to NULL which we can test The main body of the
program is one do while loop in which a single character is read from the file and output to
the monitor until an EOF (end of file) is detected from the input file The file is then closed and the program is terminated At this point we have the potential for one of the most
common and most perplexing problems of programming in C The variable returned from the getc function is a character so we can use a char variable for this purpose There is a
problem that could develop here if we happened to use an unsigned char however because C usually returns a minus one for an EOF ndash which an unsigned char type variable is not
capable of containing An unsigned char type variable can only have the values of zero to 255 so it will return a 255 for a minus one in C This is a very frustrating problem to try to
find The program can never find the EOF and will therefore never terminate the loop This
is easy to prevent always have a char or int type variable for use in returning an EOF There is another problem with this program but we will worry about it when we get to the
next program and solve it with the one following that
After you compile and run this program and are satisfied with the results it would be a good
exercise to change the name of TENLINESTXT and run the program again to see that the NULL test actually works as stated Be sure to change the name back because we are still
not finished with TENLINESTXT
File Handling
In C++ we say data flows as streams into and out of programs There are different kinds of streams of data flow for input and output Each stream is associated with a class which
contains member functions and definitions for dealing with that particular kind of flow For example the if stream class represents the input disc files Thus each file in C++ is an
object of a particular stream class
CHAPTER EXERCISE FILE HANDLING READWRITE APPEND to a FILE
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 51 of 66
EXAMPLE 1 Program to create a file and write some data the file
include ltstdiohgt
include ltstdiohgt
main( )
FILE fp
char stuff[25]
int index
fp = fopen(TENLINESTXTw) open for writing
strcpy(stuffThis is an example line)
for (index = 1 index lt= 10 index++)
fprintf(fps Line number dn stuff index)
fclose(fp) close the file before ending program
Example 2 A program that reads a file and display its contents on screen
Program to display the contents of a file on screen
include ltstdiohgt
void main()
FILE fopen() fp
int c
fp = fopen(progcr)
c = getc(fp)
while (c= EOF)
putchar(c)
c = getc(fp)
fclose(fp)
Example 3 A program to create a file and write some data into the file
include ltstdiohgt
int main()
FILE fp
file = fopen(filetxtw)
Create a file and add text
fprintf(fpsThis is just an example )) writes data to the file
fclose(fp) done
return 0
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 52 of 66
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 53 of 66
CHAPTER QUIZ
COURSE TOPIC File Handling V Objectives
To learn and understand how to manage external files particularly txt formats
To create write to read from and append to files using c++ constructs VI Tasks Procedure Instructions
Part I Declaration of Structures in Functions Pointers and Arrays
1 What is a file ____________________________________________________________________________________________________________________________________________________________________
3 When do we use the r command ____________________________________________________________________________________________________________________________________________________________________
4 TRUE Or FALSE When you open a file for appending a new one will be created if the file is not yet existing ____________________________________________________________________________________________________________________________________________________________________
Supplementary Programming (50 points)
5 Write a program that will count characters in a file Prompt the user for file and the count the number of characters and lines in it Sample Output
The program must prompt the user to enter another file if the file entered
cannot be opened
CHAPTER 11
Enter Filename
There are ltngt characters in lt filenamegt
There are ltngt lines
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 54 of 66
Introduction to Visual C++
Visual C++ comes within Microsoft Visual Studio Visual Studio also contains Visual Basic
Visual C and Visual J Using Visual Studio you can mix and match languages within one solution We will however focus on developing C++ code throughout these labs
For your first C++ program you will build a console mode application that displays a
greeting message This (ie a console mode application) is the kind of VC++ programs that
you will build for all your lab and class exercisesassignments
Console mode programs are often simpler to build than Windows applications and this example will take you through the steps of creating building and executing a program in
Visual C++ We first assume that you use the built-in code editor in Visual Studio to edit your code then we will show you how to build and run your C++ programs that you have
created with any external editors
111 How to start
Press on your window desktop choose All Programs from the popup menu then
choose Microsoft Visual Studio and Microsoft Visual Studio
112 Starting Your First Program
Select Visual C++ Development Settings then click on Start Visual Studio Note If
you want to choose another environment later click on Tools menu -gt Import and
Export -gtReset all Settings -gtNext then you can pick either save current settings or
overwrite current settings
The next thing you will see is the Start Page
To get started on your first program you must create a project that will keep track
of all the parts of your program including the C++ source code the header files etc
Therefore click the Create Project link A New Project dialogue box similar to the
one below will appear
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 55 of 66
Follow these steps
For a Name type a project name (hello) Location you can leave it in default location DVS2008
Note files created on D drive will not be deleted unless the user do so Click on OK
The Win32 Application Wizard will appear As demonstrated below click on Application
Settings and select Empty Project
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 56 of 66
After this click on Finish You will notice that it doesnt appear like anything has
changed (you still see the Start Page) However look at the Solution Explorer on the left-hand side you will see Solution hello (1 project)
You want to add C++ source code to this project
Select Project --gt Add New Item from the main menu and select C++ File (cpp) from the Templates section on the right-hand side Type in the file name
hellocpp in the Namebox Click on Add This file will be added to the hello work space
that we have just created and a blank document will be opened for editing
EXERCISE
Type this code in the code window
FILE hellocpp
PURPOSE An example of a simple IO stream
include ltiostreamgt
using namespace std
int main()
char name[50]
cout ltlt Please enter your name ltlt endl
cin gtgt name
cout ltlt Hello ltlt name ltlt endl
return 0
SAVE it as Hellocpp
Building the hello Project
In order to compile any code in Visual C++ you have to create a project A project holds three major types of information
1) It remembers all of the source code files that combine together to create one executable
In this simple example the file hellocpp will be the only source file but in larger applications you often break the code up into several different files to make it easier to
understand (and also to make it possible for several people to work on it simultaneously)
The project maintains a list of the different source files and compiles all of them as necessary each time you want to create a new executable
2) It remembers compiler and linker options particular to this specific application For
example it remembers which libraries to link into the executable whether or not you want to use pre-compiled headers and so on
3) It remembers what type of project you wish to build a console application a windows
application etc
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 57 of 66
If you are familiar with makefiles then it is easy to think of a project as a machine-
generated makefile that has a very easy-to-understand user interface to manipulate it For now we will create a very simple project file and use it to compile hellocpp
1 Compile the hello project by selecting Build --gt Compile from the main menu
It simply compiles the source file and forms the object file (helloobj) for it It does not perform a link so it is useful only for quickly compiling a file to check for errors
2 Select Build --gt Build hello from the menu bar to link the program
It compiles all of the source files in the project that have been modified since the last build and then links them to create an executable
3 Choose Debug --gt to run the program A DOS window
will popup
If errors or warnings are displayed in the Build status window there is probably an error in the source file Check your source file again for missing semicolons quotes or braces
Now we will continue using Visual C++ in another project so select File --gt Close
Solution This will return you to the Start Page
How to compile link and execute a program with multiple files
The preceding section showed the procedure for creating a C++ program with only one file
component hellocpp and we used the built-in VC++ source code editor to edit the file However when you are working on a large program you would break your program into
smaller more manageable parts In other words your project would contain more than one C++ source files Moreover you might not have used the VC++ source code editor to edit
your files
The following section demonstrates how to create compile and execute a VC++ project with more than one file
Exercise
121 Creating the project
Step 1 Select File --gt New --gt Project
Step 2 Set the project name to lab1 Step 3 Pick a project location for example DVS2008
Step 4 Click on OK to create the project
Step 5 Under Application Settings select Empty project Step 6 Click on Finish
You have now created a project that has information stored in the following folder
DVS2008lab1
You can get to this folder through the Workarea icon on the desktop
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 58 of 66
It is always a good practice to put the source files in this folder Lets do that now
Get multiple files using anonymous FTP
Obtain the files you need for this lab by clicking here CS Dept FTP Server
Right click on these files and save them to your project folder 1 dateh
2 datecpp
3 maincpp
The three files are now copied so the next step is to place them in a folder on your
PC
Move your cursor over your local system DVS2008lab1 folder and right-click Select the Paste option in the resultant pop-up menu
Even though the files are in the appropriate directory you must tell Visual Studio that these
files are part of the project
Adding existing files to the project
1 Select Project --gt Add Existing Item
2 You should be looking in the lab1 directory Highlight the h and cpp files datecpp dateh and maincpp
3 Select Add to add the files to the project
To view the contents of any of these files double click on the file name in the Solution Explorer
Compile build and execute your progam
1 Select Build --gt Build lab1 (This will compile and link the files)
2 Select Debug --gt Start Without Debugging
CHAPTER EXERCISE
Example Small program for beginners demonstrating the use of loops and iostream + iomanip
libraries
Program to make a pyramid of characters based on input from user Purpose is to examine use of ltiomaniphgt and how setw is used
Created by Gary Paduana email gary3141homecom
Written on 41501
include ltiostreamhgt
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 59 of 66
include ltiomaniphgt library that has the setw output manipulator
int main ()
char letter letter is the symbol or letter made into a giant triangle int width width is how far to go into the center of screen
int base base is how many symbols are on bottom line int a a is how many lines down the triangle is
int b = 1 b is how many symbols are displayed on each line
int counter = 0 counter is how many times the loop executed
coutltltThis program will make a triangle of the symbol enteredltltendl coutltltIt must be an odd number for the triangle to form properlyltltendl
coutltltIf an even number is entered it will be lowered to the previous oddltltendl
while(cin) This allows the program to loop until the user closes the window
coutltltEnter a symbol or characterltltendl
cingtgtletter
coutltltEnter the number of characters the base should haveltltendl
cingtgtbase
width = (base 2) + 5 - counter This is how far into the center it should space until it
starts outputting the symbol It must first be given a value before it enters the loop
a = 1 a is how many lines down the triangle is and natuarally it starts on the first line
while(width gt 5) It will loop and continue to output the symbol until it
reaches 5 spaces from the left margin so that everything isnt jammed against the side
width = (base 2) + 5 - counter This is how far into the center it should space until it starts outputting the symbol
coutltltsetw(width) setw is an output manipulator in the ltiomaniphgt
library this tell the compiler how many lines to move until it first sends a character to the screen
It is currently set to move the value of width spaces to the right before it outputs
while(b gt 0) This while loop will continue to output the desired symbol to the current line until it is equal to 1
coutltltletter outputs the letter or symbol entered
b-- b is decremented so only so many letters are outputted per line
coutltltendl an endl is used to jump to the next line to output the
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 60 of 66
next part of the triangle
b = (a 2) - 1 the number of symbols per line is found using this equation
width-- the width is decremented so that everything is
spaced properly b = b + 2 b is given 2 more symbols because it is on the next line
and every line has 2 more than the previous a++ this is how many lines into the triangle it is
counter++ the counter is used to ensure proper spacing done
by the width variable
coutltltendlltltendl endl is used to add some space between each time the program is executed
b = 1 b is returned to 1 because the program started over counter = 0 counter is returned to 0 because the program started
return 0
End of Example
CHAPTER 12
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 61 of 66
Microsoft Foundations Classes
The MFC library provides it own version of Cs file processing This is done through a class
named CStdioFile The CStdioFile class is derived from CFile
As done for the FILE structure to start normal file inputoutputoperations declare a
variable of type CStdioFile This class has five constructors whose syntaxes are
CStdioFile()
CStdioFile(CAtlTransactionManager pTM)
CStdioFile(FILE pOpenStream)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags)
CStdioFile(LPCTSTR lpszFileName UINT nOpenFlags CAtlTransactionManager
pTM)
The default constructor allows you to initiate file processing without giving much detail If
you use it you can then call the Open() method that the CStdioFile class inherits fromCFile Pass the same arguments you would for a CFile variable
1 To create a new application on the main menu click File -gt New Project
2 In the middle list click MFC Application
3 Set the Name to LoanPreparation1
4 Click OK
5 In the first page of the MFC Application Wizard click Next
6 In the second page of the wizard click Dialog Box
7 Click Next
8 In the third page of the wizard change the Dialog Title to Loan Preparation
9 Click Next twice
10 Click Finish
11 On the dialog box click TODO and press Delete
12 Press the OK button and press Delete
13 Click the Cancel button to select it
14 In the Properties window click Caption type Close and press Enter
15 Design the dialog box as follows
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 62 of 66
Control Caption ID Right Align Text
Static Text Prepared By
Edit Control IDC_CUSTOMERNAME
Static Text Prepared For
Edit Control IDC_EMPLOYEENAME
Static Text ________________
Static Text Loan Amount
Edit Control IDC_PRINCIPAL True
Static Text Interest Rate
Edit Control IDC_INTERESTRATE True
Static Text
Static Text Paid In
Edit Control IDC_PERIODS True
Static Text Months
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 63 of 66
Button Evaluate IDC_EVALUATE
Static Text _________________
Static Text Future Value
Edit Control IDC_FUTUREVALUE True
Static Text Monthly Payment
Edit Control IDC_MONTHLYPAYMENT True
Static Text _________________
Static Text Save As
Edit Control IDC_FILESAVE True
Button Save IDC_SAVE_BTN
Static Text File to Open
Edit Control IDC_FILEOPEN True
Button Open IDC_OPEN_BTN
Static Text File Name
Button Reset IDC_RESET_BTN
Button Close IDCANCEL
16 Right-click each edit control click Add Variable select the category as Value set the
options as follows and click Finish on each
Control ID Category Variable Type Variable Name
IDC_CUSTOMERNAME Value CString m_CustomerName
IDC_EMPLOYEENAME Value CString m_EmployeeName
IDC_PRINCIPAL Value CString m_Principal
IDC_INTERESTRATE Value CString m_InterestRate
IDC_PERIODS Value CString m_Periods
IDC_FUTUREVALUE Value CString m_FutureValue
IDC_MONTHLYPAYMENT Value CString m_MonthlyPayment
IDC_FILESAVE Value CString m_FileSave
IDC_FILEOPEN Value CString m_FileOpen
17 Access the source file of the dialog box and change the initializations in the
constructor as follows
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 64 of 66
1 CLoanPreparation1DlgCLoanPreparation1Dlg(CWnd pParent =NULL)
2 CDialogEx(CLoanPreparation1DlgIDD pParent)
3 m_CustomerName(_T())
4 m_EmployeeName(_T())
5 m_Principal(_T(000))
6 m_InterestRate(_T(000))
7 m_Periods(_T(0))
8 m_FutureValue(_T(000))
9 m_MonthlyPayment(_T(000))
10 m_FileSave(_T())
11 m_FileOpen(_T())
12
13 m_hIcon = AfxGetApp()-gtLoadIcon(IDR_MAINFRAME)
14 Return to the dialog box
15 Double-click the Evaluate button
16 Implement the event as follows
17 void CLoanPreparation1DlgOnBnClickedEvaluate()
18
19 UpdateData(TRUE)
20
21 double Principal = _wtof(m_Principal)
22 double InterestRate = _wtof(m_InterestRate) 100
23 double Periods = _wtof(m_Periods) 12
24 double InterestAmount = Principal InterestRate Periods
25 double FutureValue = Principal + InterestAmount
26 double MonthlyPayment = FutureValue _wtof(m_Periods)
27
28 m_FutureValueFormat(L2f FutureValue)
29 m_MonthlyPaymentFormat(L2f MonthlyPayment)
30
31 UpdateData(FALSE)
32 Return to the dialog box
33 Double-click the Reset button
34 Implement the event as follows
35 void CLoanPreparation1DlgOnBnClickedResetBtn()
36
37 m_CustomerName = L
38 m_EmployeeName = L
39 m_Principal = L000
40 m_InterestRate = L000
41 m_Periods = L000
42 m_FutureValue = L000
43 m_MonthlyPayment = L000
44 m_FileSave = L
45 m_FileOpen = L
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 65 of 66
46
47 UpdateData(FALSE)
CHAPTER QUIZ
COURSE TOPIC Introduction to Visual C++ MFC Application
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below
Prof Erwin M Globio MSIT Page 66 of 66
I Objectives
To learn and understand how to use visual c++ objects
To be able to apply Microsoft Foundation Classes
II Tasks Procedure Instructions
Make an MFC application that would ask the users to enter a pizza combo Each
combination has a corresponding price (set your own prices) Additional fees will be due for every extra toppings that the users may wish to add The application must
also compute for the total amount payable by the user (customer)
See the sample output below