PascalPascal
234319 CourseWinter 2010/11 1
IntroductionIntroduction
• Imperative and procedural programming language
• Designed: 1968/9
• Published: 1970
• Static and strong typing
• Static binding
• We will use:
– FreePascal 2.4.0
/>Winter 2010/11 234319 Course
These concepts will be
explained in the lectures
2
A basic Pascal programA basic Pascal program
program HelloWorld;
{ Definitions are placed here -
types, variables, procedures, functions, … }
begin
WriteLn(‘
Hello World!
’);
{ More statements can be added here }
end.
Winter 2010/11 234319 Course 3
A basic Pascal programA basic Pascal program
program
program program
program HelloWorld
HelloWorldHelloWorld
HelloWorld;
;;
;
{ Definitions are placed here -
types, variables, procedures, functions, … }
begin
WriteLn(‘
Hello World!
’);
{ More statements can be added here }
end.
Winter 2010/11 234319 Course
Program Heading
4
A basic Pascal programA basic Pascal program
program HelloWorld;
{ Definitions are placed here
{ Definitions are placed here { Definitions are placed here
{ Definitions are placed here -
-
types, variables, procedures, functions, … }
types, variables, procedures, functions, … }types, variables, procedures, functions, … }
types, variables, procedures, functions, … }
begin
beginbegin
begin
WriteLn
WriteLnWriteLn
WriteLn(‘
(‘(‘
(‘
Hello World!
Hello World!Hello World!
Hello World!
’);
’);’);
’);
{ More statements can be added here }
{ More statements can be added here }{ More statements can be added here }
{ More statements can be added here }
end.
end.end.
end.
Winter 2010/11 234319 Course
Block
5
A basic Pascal programA basic Pascal program
program HelloWorld;
{ Definitions are placed here
{ Definitions are placed here { Definitions are placed here
{ Definitions are placed here -
-
types, variables, procedures, functions, … }
types, variables, procedures, functions, … }types, variables, procedures, functions, … }
types, variables, procedures, functions, … }
begin
WriteLn(‘
Hello World!
’);
{ More statements can be added here }
end.
Winter 2010/11 234319 Course
Declaration Part
6
A basic Pascal programA basic Pascal program
program HelloWorld;
{ Definitions are placed here -
types, variables, procedures, functions, … }
begin
beginbegin
begin
WriteLn
WriteLnWriteLn
WriteLn(‘
(‘(‘
(‘
Hello World!
Hello World!Hello World!
Hello World!
’);
’);’);
’);
{ More statements can be added here }
{ More statements can be added here }{ More statements can be added here }
{ More statements can be added here }
end.
end.end.
end.
Winter 2010/11 234319 Course
Statement Part
7
Data TypesData Types
• Pascal has 4 primitive types:
– integer, boolean, real, char
• We can also create our own types:
– Enumerated types:
type Color = (Red, Green, Blue, Yellow);
type MonthType = (January, February, ,December);
Enumerated types are comparable:
Red < Blue = true,
succ(Red) = Green,
pred(Blue) = Green,
ord(Yellow) = 3
Winter 2010/11 234319 Course 8
Data Types Data Types cont.cont.
– Subrange types:
type Letter = ‘A’ ’Z’;
Index = 3 8;
ColorList = Red Blue;
– Records (Complex types like C structs):
type date = record
day : 1 31;
month : MonthType;
year : 1900 2100;
end;
Winter 2010/11 234319 Course 9
Arrays in PascalArrays in Pascal
Winter 2010/11 234319 Course 10
• Pascal arrays are defined as follow:
array [<index-type>] of <element-type>
• May have multiple indexes:
• array [1 5 , 8 10] of …
• Example:
• var
varvar
var A : array
arrayarray
array [1 5] of
ofof
of real
realreal
real;
• var
varvar
var pens : array
arrayarray
array [Red Green] of
ofof
of record
recordrecord
record
width : 1 3;
kind : (Regular,Bold);
end;
end;end;
end;
• For
ForFor
For col := Red to Yellow do
dodo
do
writeLn(pens[col].width);
!!!
Functions and Procedures Functions and Procedures
• Pascal functions always return a value
function myFunc(…) : int;
begin
…
myFunc := 13; {note how we set the value}
…
end;
• A function that doesn’t return anything is a procedure.
procedure myProc(…);
begin
…
end;
Winter 2010/11 234319 Course 11
A simple problem…A simple problem…
• Given a range of positive numbers:
– Summarize all numbers in range that divide by 3 or 5.
– Print the result.
Winter 2010/11 234319 Course 12
program Sum;
function sumOfMatching(s, e : integer) : integer;
var sum, i : integer;
begin
sum :=
0;
for i := s to e do
begin
if ( (i mod
3 = 0) or (i mod 5 = 0) )
then sum := sum + i;
end;
sumOfMatching := sum;
end;
begin
WriteLn( sumOfMatching(
1,1000) );
end.
Version Version 11
Winter 2010/11 234319 Course 13
Version Version 11
program Sum;
function sumOfMatching(s, e : integer) : integer;
var sum, i : integer;
begin
sum :=
0;
for i := s to e do
begin
if ( (i mod
3 = 0) or (i mod 5 = 0) )
then sum := sum + i;
end;
sumOfMatching := sum;
end;
begin
WriteLn( sumOfMatching(
1,1000) );
end.
What if s<0? e<0?
Auxiliary
Function?
Winter 2010/11 234319 Course 14
Version Version 22
program Sum;
type
type type
type positiveInt
positiveIntpositiveInt
positiveInt =
= =
= 1
11
1 MAXINT;
MAXINT; MAXINT;
MAXINT;
function isMatching
isMatchingisMatching
isMatching(i : integer) : boolean;
begin
isMatching := ((i mod
3 = 0) or (i mod 5 = 0));
end;
function sumOfMatching(s, e : positiveInt
positiveIntpositiveInt
positiveInt) : integer;
var sum, i : integer;
begin
sum := 0; for i := s to e do begin
if ( isMatching
isMatchingisMatching
isMatching(
((
(i
ii
i)
) )
) ) then sum := sum + i;
end;
sumOfMatching := sum;
end;
begin WriteLn( sumOfMatching(1,1000) ); end.
What if s>e?
Winter 2010/11 234319 Course 15
Version Version 33
program Sum;
type positiveInt = 1 MAXINT;
function SumOfMatching(s, e : positiveInt) : Integer;
var sum, i : integer;
function
function function
function isMatching
isMatchingisMatching
isMatching(
((
(i
ii
i : integer) :
: integer) : : integer) :
: integer) : boolean
booleanboolean
boolean;
; ;
;
begin
begin begin
begin
isMatching
isMatchingisMatching
isMatching := ((
:= ((:= ((
:= ((i
ii
i mod
mod mod
mod
3
33
3 =
= =
= 0
00
0) or (
) or () or (
) or (i
ii
i mod
mod mod
mod 5
55
5 =
= =
= 0
00
0));
)); ));
));
end;
end;end;
end;
begin
sum := 0; for i := s to e do begin
if ( isMatching(i) ) then sum := sum + i;
end;
sumOfMatching := sum;
end;
begin WriteLn( sumOfMatching(1,1000) ); end.
Winter 2010/11 234319 Course 16
Version Version 33
program Sum;
type positiveInt = 1 MAXINT;
function SumOfMatching(s, e : positiveInt) : Integer;
var sum, i : integer;
function isMatching(i : integer) : boolean;
begin
isMatching := ((i mod
3 = 0) or (i mod 5 = 0));
end;
begin
sum := 0; for i := s to e do begin
if ( isMatching(i) ) then sum := sum + i;
end;
sumOfMatching := sum;
end;
begin WriteLn( sumOfMatching(1,1000) ); end.
‘3’ and ‘5’ should be
inputs / consts…
What is the difference?
Can it be done in C/C++?
Winter 2010/11 234319 Course 17
Version Version 44
program Sum;
type positiveInt = 1 MAXINT;
function sumOfMatching(s,e,div
divdiv
div1
11
1,div
,div,div
,div2
22
2:positiveInt):integer;
var sum, i : integer;
function isMatching(i , d
dd
d1
11
1, d
, d, d
, d2
2 2
2 : integer) : boolean;
begin
isMatching := ((i mod d
dd
d1
11
1=0) or (i mod d
dd
d2
22
2=0));
end;
begin
sum := 0; for i := s to e do begin
if (isMatching(i,div
divdiv
div1
11
1,div
,div,div
,div2
22
2)) then sum:=sum+i;
end;
sumOfMatching := sum;
end;
begin WriteLn( sumOfMatching(1,1000,
, ,
, 3
33
3,
, ,
, 5
55
5) ); end.
Winter 2010/11 234319 Course 18
Version Version 44
program Sum;
type positiveInt = 1 MAXINT;
function sumOfMatching(s,e,div
divdiv
div1
11
1,div
,div,div
,div2
22
2:positiveInt):integer;
var sum, i : integer;
function isMatching(i , d
dd
d1
11
1, d
, d, d
, d2
2 2
2 : integer) : boolean;
begin
isMatching := ((i mod d
dd
d1
11
1=0) or (i mod d
dd
d2
22
2=0));
end;
begin
sum := 0; for i := s to e do begin
if (isMatching(i,div
divdiv
div1
11
1,div
,div,div
,div2
22
2)) then sum:=sum+i;
end;
sumOfMatching := sum;
end;
begin WriteLn( sumOfMatching(1,1000,
, ,
, 3
33
3,
, ,
, 5
55
5) ); end.
‘div1’ and ‘div2’ are
already known to nested
function ‘isMatching’!
Winter 2010/11 234319 Course 19
Version Version 55
program Sum;
type positiveInt = 1 MAXINT;
function sumOfMatching(s,e,div1,div2:positiveInt):integer;
var sum, i : Integer;
function isMatching(i : Integer) : boolean;
begin
isMatching:=((i mod div
divdiv
div1
11
1=0) or (i mod div
divdiv
div2
22
2=0));
end;
begin
sum := 0; for i := s to e do begin
if ( isMatching(i) ) then sum := sum + i;
end;
sumOfMatching := sum;
end;
begin WriteLn( sumOfMatching(1,1000,
, ,
, 3, 5) ); end.
Winter 2010/11 234319 Course 20
A more general solutionA more general solution
• We can also change ‘isMatching’ to receive a matcher
- a pointer to a function, as an argument, and call it
with any integer→boolean function we desire.
Winter 2010/11 234319 Course 21
program Sum;
type positiveInt = 1 MAXINT;
type matcher = function ( i:integer ) :
matcher = function ( i:integer ) : matcher = function ( i:integer ) :
matcher = function ( i:integer ) : boolean
booleanboolean
boolean;
;;
;
{ defining a matcher }
function m1( i : integer ) : boolean;
begin
m1 := ((i mod
7 = 0) or (i mod 13 = 0));
end;
Winter 2010/11 234319 Course
Version Version 66
22
function sumOfMatching( s, e : positiveInt ;
isMatching
isMatchingisMatching
isMatching : matcher
: matcher : matcher
: matcher ) : integer;
var sum, i : Integer;
begin
for i := s to e do begin
if ( isMatching
isMatchingisMatching
isMatching(
((
(i
ii
i)
) )
) )
then sum := sum + i;
end;
end;
begin
WriteLn( sumOfMatching(1, 1000, @m
@m@m
@m1
11
1) );
end.
Winter 2010/11 234319 Course
Version Version 6 6 –– cont.cont.
Notice the syntax – ‘@’
23
So why learn So why learn PascalPascal????
• Still quite useful
– Safety
• Mixing types leads to errors.
• No type casting and no pointer arithmetic.
– Speed and Size
• Pascal compiler still fast.
– Teaching Purposes
• Shown to be easier to learn.
• Less overhead and fewer ways for a student to get a
program into trouble.
Winter 2010/11 234319 Course 24
So why learn So why learn PascalPascal?? ?? –– cont.cont.
• Still in the market
– Many small-scale freeware, shareware, and open-
source programs are written in Pascal or in
Delphi (“Object Pascal”).
• We will use Pascal and Pascal-like languages in
many examples and most likely in some of the
exam questions.
– So you need to know the basics of it… ☺
Winter 2010/11 234319 Course 25