Programming Language 2 (Eee) : Lab Manual
Programming Language 2 (Eee) : Lab Manual
LANGUAGE 2 [EEE]
LAB MANUAL
Programming is a core activity in the process of performing tasks or solving problems with the aid of a computer.
An idealized picture is:
Unfortunately things are not (yet) that simple. In particular, the "specification" cannot be given to the computer
using natural language. Moreover, it cannot (yet) just be a description of the problem or task, but has to contain
information about how the problem is to be solved or the task is to be executed. Hence we need programming
languages.
There are many different programming languages, and many ways to classify them. For example, high-level
programming languages are languages whose syntax is relatively close to natural language, whereas the syntax of
low-level languages includes many technical references to the nuts and bolts (0's and 1's, etc.) of the computer.
Declarative languages (as opposed to imperative or procedural languages) enable the programmer to minimize his
or her account of how the computer is to solve a problem or produce a particular output. Object-oriented
languages reflect a particular way of thinking about problems and tasks in terms of identifying and describing the
behavior of the relevant "objects". Smalltalk is an example of a pure object-oriented language. C++ includes
facilities for object-oriented programming, as well as for more conventional procedural programming.
Proponents of different languages and styles of languages sometimes make extravagant claims. For example, it is
sometimes claimed that (well written) object-oriented programs reflect the way in which humans think about
solving problems.
/* This program prompts the user for the current year, the user's current
age, and another year. It then calculates the age that the user was or
will be in the second year entered. */
#include <iostream>
int main()
{ int year_now, age_now, another_year, another_age;
cout << "Enter the current year then press RETURN.\n"; cin
>> year_now;
cout << "Enter the year for which you wish to know your age.\n";
cin >> another_year;
another_age = another_year (year_now
age_now);
if (another_age >= 0)
{ cout << "Your age in " << another_year << ": ";
cout << another_age << "\n";
} else
{ cout << "You weren't even born in ";
cout << another_year << "!\n";
}
return 0;
}
#include <iostream>
This statement is called an include directive. It tells the compiler and the linker that the program will need to be
linked to a library of routines that handle input from the keyboard and output to the screen (specifically the cin
and cout statements that appear later). The header file iostream contains basic information about this library.
This statement is called a using directive. The latest versions of the C++ standard divide names (e.g. cin and
cout) into sub collections of names called namespaces. This particular using directive says the program will be
using names that have a meaning defined for them in the std namespace (in this case the iostream header
defines meanings for cout and cin in the std namespace).
Some older C++ compilers do not support namespaces. In this case you can use the older form of the include
directive (that does not require a using directive, and places all names in a single global namespace):
#include <iostream.h>
Some of the legacy code you encounter in industry may be written using this older style for headers. Because the
program is short, it is easily packaged up into a single list of program statements and commands. After the
include and using directives, the basic structure of the program is:
int main() {
First statement;
...
...
Last statement;
return 0;
All C++ programs have this basic "top-level" structure. Notice that each statement in the body of the program
ends with a semicolon. In a well-designed large program, many of these statements will include references or calls
to subprograms, listed after the main program or in a separate file. These subprograms have roughly the same
outline structure as the program here, but there is always exactly one such structure called main. When at the end
of the main program, the line
return 0;
means "return the value 0 to the computer's operating system to signal that the program has completed
successfully". More generally, return statements signal that the particular subprogram has finished, and return a
value, along with the flow of control, to the program level above. More about this later.
Program variables are not like variables in mathematics. They are more like symbolic names for "pockets of
computer memory" which can be used to store different values at different times during the program execution.
These variables are first introduced in our program in the variable declaration
int year_now, age_now, another_year, another_age;
which signals to the compiler that it should set aside enough memory to store four variables of type "int" (integer)
during the rest of the program execution. Hence variables should always be declared before being used in a
program. Indeed, it is considered good style and practice to declare all the variables to be used in a program or
subprogram at the beginning. Variables can be one of several different types in C++, and we will discuss variables
and types at some length later.
After we have compiled the program above, we can run it. The result will be something like
The first, third, fifth and seventh lines above are produced on the screen by the program. In general, the program
statement
Expression1Expression2...ExpressionN
will produce an identical output. If spaces or new lines are needed between the output expressions, these have to
be included explicitly, with a " " or a "\n" respectively. The expression endl can also be used to output a new
line, and in many cases is preferable to using "\n" since it has the side effect of flushing the output buffer (output
is often stored internally and printed in chunks when sufficient output has been accumulated; using endl forces
all output to appear on the screen immediately).
The numbers in bold in the example screen output above have been typed in by the user. In this particular program
run, the program statement
has resulted in the variable year_now being assigned the value 2001 at the point when the user pressed ENTER
after typing in "2001". Programs can also include assignment statements, a simple example of which is the
statement
Hence the symbol = means "is assigned the value of". ("Equals" is represented in C++ as ==.)
The last few lines of our example program (other than "return 0") are:
if (another_age >= 0)
{ cout << "Your age in " << another_year << ": ";
cout << another_age << "\n";
} else
{ cout << "You weren't even born in ";
cout << another_year << "!\n";
}
The "if ... else ..." branching mechanism is a familiar construct in many procedural programming languages. In
C++, it is simply called an if statement, and the general syntax is
if (condition)
{
Statement1; ...
...
StatementN;
} else
{
StatementN+1; ...
...
StatementN+M;
}
The "else" part of an "if statement" may be omitted, and furthermore, if there is just one Statement after the "if
(condition)", it may be simply written as
if (condition)
Statement;
It is quite common to find "if statements" strung together in programs, as follows:
... ... if (total_test_score < 50) cout << "You are a failure.
You must study much harder.\n";
else if (total_test_score < 65) cout << "You have just
scraped through the test.\n";
else if (total_test_score < 80) cout <<
"You have done quite well.\n";
else if (total_test_score < 95) cout << "Your score
is excellent. Well done.\n";
else { cout << "You
cheated!\n";
total_test_score = 0;
}
...
...
This program fragment has quite a complicated logical structure, but we can confirm that it is legal in C++ by
referring to the syntax diagram for "if statements". In such diagrams, the terms enclosed in ovals or circles refer
to program components that literally appear in programs.
Terms enclosed in boxes refer to program components that require further definition, perhaps with another syntax
diagram. A collection of such diagrams can serve as a formal definition of a programming language's syntax
(although they do not help distinguish between good and bad programming style!).
Below is the syntax diagram for an "if statement". It is best understood in conjunction with the syntax diagram
for a "statement". In particular, notice that the diagram doesn't explicitly include the ";" or "{}" delimiters, since
these are built into the definition (syntax diagram) of "statement".
The C++ compiler accepts the program fragment in our example by counting all of the bold text in
... ... if (total_test_score < 50) cout << "You are a failure.
You must study much harder.\n";
else if (total_test_score < 65) cout << "You have just
scraped through the test.\n";
else if (total_test_score < 80) cout <<
"You have done quite well.\n";
else if (total_test_score < 95) cout << "Your score
is excellent. Well done.\n";
else { cout << "You
cheated!\n";
total_test_score = 0;
}
...
...
2.0 Exercises
Question 1
Create a directory (folder) called "AgeCalculator". Inside this directory, create a program file called
"AgeCalculator.cpp", save the file, compile it, and run it. Compare your screen output with the example output in
theclecture notes. Briefly experiment in improving and changing the output format.
Question 2
Alter Program 1.1.1 so that if "another_age" works out to be more than 150, the screen output is:
Test the program with various different inputs from the keyboard.
Question 3
Alter your program from question 2 so that it deals with months as well as years, and produces output such as the
following:
The program should cope with singulars and plurals properly in the output, e.g. "1 month" but "2 months".
Hints: you will have to introduce extra variables in the variable declaration, and may find the following arithmetical
operations useful:
+ Addition 3+5 8
- Subtraction 43 ‐ 25 18
* Multiplication 4*7 28
/ Division 9/2 4
% Modulus 20 % 6 2
(Notice that when the division sign "/" is used with two integers, it returns an integer.) You may also want to use
the following comparison operators:
greater than or
>= 9 >= 2 TRUE
equal to
== equal to 20 == 6 FALSE