Presentation is loading. Please wait.

Presentation is loading. Please wait.

Pascal Winter 2010/11 234319 Course.

Similar presentations


Presentation on theme: "Pascal Winter 2010/11 234319 Course."— Presentation transcript:

1 Pascal Winter 2010/11 Course

2 Introduction Imperative and procedural programming language
Designed: 1968/9 Published: 1970 Static and strong typing Static binding We will use: FreePascal These concepts will be explained in the lectures Winter 2010/11 Course

3 A 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 Course

4 A basic Pascal program Program Heading program HelloWorld;
{ Definitions are placed here - types, variables, procedures, functions, … } begin WriteLn(‘Hello World!’); { More statements can be added here } end. Program Heading Winter 2010/11 Course

5 A basic Pascal program Block program HelloWorld;
{ Definitions are placed here - types, variables, procedures, functions, … } begin WriteLn(‘Hello World!’); { More statements can be added here } end. Block Winter 2010/11 Course

6 A basic Pascal program Declaration Part program HelloWorld;
{ Definitions are placed here - types, variables, procedures, functions, … } begin WriteLn(‘Hello World!’); { More statements can be added here } end. Declaration Part Winter 2010/11 Course

7 A basic Pascal program Statement Part program HelloWorld;
{ Definitions are placed here - types, variables, procedures, functions, … } begin WriteLn(‘Hello World!’); { More statements can be added here } end. Statement Part Winter 2010/11 Course

8 Data 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 Course

9 Data Types - cont. Subrange types:
type Letter = ‘A’ .. ’Z’; Index = ; ColorList = Red .. Blue; Records (Complex types like C structs): type date = record day : ; month : MonthType; year : ; end; Winter 2010/11 Course

10 Arrays in Pascal Pascal arrays are defined as follow:
array [<index-type>] of <element-type> May have multiple indexes (dimensions): array [1..5 , 2..6] of … Example: var A : array [1..5] of real; var pens : array [Red..Green] of record width : 1..3; kind : (Regular,Bold); end; For col := Red to Yellow do writeLn(pens[col].width); !!! Winter 2010/11 Course

11 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(…); Winter 2010/11 Course

12 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 Course

13 Version 1 program Sum; function sumOfMatching(s, e : integer) : integer; var sum, i : integer; begin sum := 0; for i := s to e do if ( (i mod 3 = 0) or (i mod 5 = 0) ) then sum := sum + i; end; sumOfMatching := sum; WriteLn( sumOfMatching(1,1000) ); end. Winter 2010/11 Course

14 Version 1 What if s<0? e<0? Auxiliary Function?
program Sum; function sumOfMatching(s, e : integer) : integer; var sum, i : integer; begin sum := 0; for i := s to e do if ( (i mod 3 = 0) or (i mod 5 = 0) ) then sum := sum + i; end; sumOfMatching := sum; WriteLn( sumOfMatching(1,1000) ); end. What if s<0? e<0? Auxiliary Function? Winter 2010/11 Course

15 Version 2 program Sum; type positiveInt = 1..MAXINT; function isMatching(i : integer) : boolean; begin isMatching := ((i mod 3 = 0) or (i mod 5 = 0)); end; function sumOfMatching(s, e : positiveInt) : integer; var sum, i : integer; sum := 0; for i := s to e do begin if ( isMatching(i) ) then sum := sum + i; sumOfMatching := sum; begin WriteLn( sumOfMatching(1,1000) ); end. What if s>e? Winter 2010/11 Course

16 Version 3 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; sum := 0; for i := s to e do begin if ( isMatching(i) ) then sum := sum + i; sumOfMatching := sum; begin WriteLn( sumOfMatching(1,1000) ); end. Winter 2010/11 Course

17 Version 3 What is the difference? Can it be done in C/C++?
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; sum := 0; for i := s to e do begin if ( isMatching(i) ) then sum := sum + i; sumOfMatching := sum; begin WriteLn( sumOfMatching(1,1000) ); end. What is the difference? Can it be done in C/C++? ‘3’ and ‘5’ should be inputs / consts… Winter 2010/11 Course

18 Version 4 program Sum; type positiveInt = 1..MAXINT; function sumOfMatching(s,e,div1,div2:positiveInt):integer; var sum, i : integer; function isMatching(i , d1, d2 : integer) : boolean; begin isMatching := ((i mod d1=0) or (i mod d2=0)); end; sum := 0; for i := s to e do begin if (isMatching(i,div1,div2)) then sum:=sum+i; sumOfMatching := sum; begin WriteLn( sumOfMatching(1,1000, 3, 5) ); end. Winter 2010/11 Course

19 ‘div1’ and ‘div2’ are already known to nested function ‘isMatching’!
Version 4 program Sum; type positiveInt = 1..MAXINT; function sumOfMatching(s,e,div1,div2:positiveInt):integer; var sum, i : integer; function isMatching(i , d1, d2 : integer) : boolean; begin isMatching := ((i mod d1=0) or (i mod d2=0)); end; sum := 0; for i := s to e do begin if (isMatching(i,div1,div2)) then sum:=sum+i; sumOfMatching := sum; begin WriteLn( sumOfMatching(1,1000, 3, 5) ); end. ‘div1’ and ‘div2’ are already known to nested function ‘isMatching’! Winter 2010/11 Course

20 Version 5 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 div1=0) or (i mod div2=0)); end; sum := 0; for i := s to e do begin if ( isMatching(i) ) then sum := sum + i; sumOfMatching := sum; begin WriteLn( sumOfMatching(1,1000, 3, 5) ); end. Winter 2010/11 Course

21 A 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 Course

22 Version 6 program Sum; type positiveInt = 1..MAXINT; type matcher = function ( i:integer ) : boolean; { defining a matcher } function m1( i : integer ) : boolean; begin m1 := ((i mod 7 = 0) or (i mod 13 = 0)); end; ... Winter 2010/11 Course

23 Version 6 – cont. Notice the syntax – ‘@’
... function sumOfMatching( s, e : positiveInt ; isMatching : matcher ) : integer; var sum, i : Integer; begin for i := s to e do begin if ( isMatching(i) ) then sum := sum + i; end; WriteLn( sumOfMatching(1, ); end. Notice the syntax – Winter 2010/11 Course

24 So why learn Pascal?? Still quite useful Safety Speed and Size
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 Course

25 So why learn Pascal?? – 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 Course


Download ppt "Pascal Winter 2010/11 234319 Course."

Similar presentations


Ads by Google