1 / 23

Pascal

Pascal. Introduction. Imperative and procedural programming language Designed: 1968/9 Published: 1970 Static and strong typing Static binding We will use: FreePascal 2.4.0 http://www.freepascal.org/download.var. These concepts will be explained in the lectures. A basic Pascal program.

gavan
Download Presentation

Pascal

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pascal 234319 Course

  2. Introduction • Imperative and procedural programming language • Designed: 1968/9 • Published: 1970 • Static and strong typing • Static binding • We will use: • FreePascal 2.4.0http://www.freepascal.org/download.var These concepts will be explained in the lectures 234319 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. 234319 Course

  4. 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. Program Heading 234319 Course

  5. 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. Block 234319 Course

  6. 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. Declaration Part 234319 Course

  7. 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. Statement Part 234319 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 234319 Course

  9. Data Types - 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; 234319 Course

  10. Arrays in Pascal • Pascal arrays are defined as follow: array [<index-type>] of <element-type> • May have multiple indexes: • array [1..5 , 8..10] of … • Example: • var A : array [1..5] ofreal; • var pens : array [Red..Green] ofrecord • width : 1..3; • kind : (Regular,Bold); • end; • Forcol := Red to Yellow do • writeLn(pens[col].width); !!! 234319 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(…); begin … end; 234319 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. 234319 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 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. 234319 Course

  14. Version 1 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? 234319 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; 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. What if s>e? 234319 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; 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. 234319 Course

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

  19. 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; begin sum := 0; for i := s to e do begin if (isMatching(i,div1,div2)) then sum:=sum+i; end; sumOfMatching := sum; end; begin WriteLn( sumOfMatching(1,1000, 3, 5) ); end. ‘div1’ and ‘div2’ are already known to nested function ‘isMatching’! 234319 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; 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. 234319 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. 234319 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; ... 234319 Course

  23. Version 6 – cont. ... 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; ... end; begin WriteLn( sumOfMatching(1, 1000, @m1) ); end. Notice the syntax – ‘@’ 234319 Course

More Related