Lecture 6: Assignment and Constants |
PROGRAM WritelnUnformatted;
Var r: real;
i: integer;
begin
writeln('Real r = ', r);
writeln('Integer i = ',
i, '!!');
end.
output:
Real r = 3.00000E-2
Integer i = 1!!
To change the way the values are presented, we can specify the width of the text, and, for variables of floating point type (real, double, extended), the number of cases after the floating point. Note the following example:
PROGRAM WritelnFormatted;
Var r: real;
i: integer;
begin
writeln('Real r = ', r:8:6);
writeln('Integer i = ',
i:5, '!!');
end.
output:
Real r = 0.030000
Integer i =
1!!
The real r is shown with a total of 8 places reserved, and 6 digits after the floating point. The integer i is written with 5 places of text. Since in this case only one digit was enough, the rest, 4 places, is filled with empty spaces.
Giving a new value to a variable is called assignment. In PASCAL
this is done with the operator
On the left side op this operator we put the variable, on the right side we put the new value or expression that will produce a value of the same type as the variable. Examples:
a := 3.0;
b := 3.0*a;
c := Cos(t);
wrong (assuming a is of type real):
1.0 := a;
a := TRUE;
a := 1;
In reality, for PASCAL the last example was correct. PASCAL knows what we want and helps us by converting the integer 1 to the real 1.0. In other languages (C, FORTRAN) this is not so. In any case, it is bad practice to mix reals with integers and we'd better write: a := 1.0;
The symbol := is pronounced as 'will be', or 'becomes'. This
to distinguish it from the normal mathematical symbol =. At this stage,
it is interesting to make a comparison between the mathematical symbol
= and the assigment symbol in programming languages (:= in PASCAL). As
an example take the following mathematical equation
a = a + 1
This, as we all know, does not have a solution for a. (In comparison,
another example: a = a2 -
2, has a solution, namely a = 2).
In programming languages, however, we should read the equation differently:
a := a + 1;
means
(the new value of a) (will be)
(the old value of a) (plus 1)
Or, in other words: first the value of a is loaded from memory,
then 1 is added to it, and finally the result is put back in memory. This
is fundamentally different than the mathematical equation. Exactly for
this reason, in PASCAL the symbol := was invented for assignment.
To avoid confusion. In most other modern languages the symbol =
is used, which is confusing, especially for the beginning programmer. That
is why the student is advised to pronounce the assigment symbol as 'becomes'
or 'will be' instead of 'is' or 'equals'.
To summarize, the := symbol is
NOT part of a comparison ("a is equal to b?") NOT part of an equation ("a2 = 2a -1") it IS an assignment ("a becomes b") |
Later, we will learn how to make comparisons (in the lecture on "if
.. then" and "boolean algebra"), for which we will use the = symbol.
PROGRAM ConstExample;
VAR angle: real;
tan: real;
CONST PI = 3.1415926;
begin
angle := 45.0;
angle := PI*angle/180.0;
tan := Sin(angle)/Cos(angle);
end.
Note the way the constant is written, namely in UPPERCASE. Remember that PASCAL is not case sensitive and we can mix uppercase and lowercase whenever we want. Still, the use of uppercase for constants is a useful convention which the student is advised to follow. Any programmer reading our program can rapidly see that he is dealing with a consatnt instead of a variable.
Interesting technical detail: To be more precise, for constants no space in memory is reserved like it is for variables. Instead, the compiler, everytime it encounters the name of our constant in our text, will substitute it's value. We do not have to worry about this detail, though. For all good purposes, we can assume that a constant is a variable that cannot change value.
Consider the following example:
PROGRAM InterestRateExample;
VAR money: real;
CONST TAXA = 4.3;
begin
money := 99.0;
money := money*(1.0+TAXA/100.0);
end.
In case the interest rates change, we only have to change our program
in one place (probably somehwere in the beginning). This avoids errors
and inconsistencies in the changed program. If we forget to change it in
one place the program will produce erroneous output, and now imagine a
program with thousands of lines of PASCAL code. It is easy to miss one
instance of our interest rate.
after executing the line |
after executing the line |
|
PROGRAM Assign;
VAR a: real;
begin
|
undefined
|
undefined
|