Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
333,07 KB
Nội dung
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 http://www.freepascal.org/download.var 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 [...]... Course 23 So why learn Pascal? ? Pascal? ? • 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 Pascal? ? – cont Pascal? ? • Still in the... Winter 2010/11 234319 Course 24 So why learn Pascal? ? – cont Pascal? ? • Still in the market – Many small-scale freeware, shareware, and opensource 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 . 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. will use: – FreePascal 2.4.0 http://www.freepascal.org/download.var Winter 2010/11 234319 Course These concepts will be explained in the lectures 2 A basic Pascal programA basic Pascal program program. ‘@’ 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. –