Tải bản đầy đủ (.pdf) (13 trang)

Learning pascal ebook

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (333.07 KB, 13 trang )

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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×