880 likes | 1.43k Views
Learn Pascal. Content. Backgournd Basics Input/Output Program Flow Data Types Subroutines. About Pascal. Origins: ALGOL Inventor: Dr. Niklaus Wirth Date of Birth: 1971 Feature: Simple, Precise, Procedure-oriented Classic Compilers: Turbo Pascal, Borland Pascal, Free Pascal
E N D
Content • Backgournd • Basics • Input/Output • Program Flow • Data Types • Subroutines
About Pascal • Origins: ALGOL • Inventor: Dr. Niklaus Wirth • Date of Birth: 1971 • Feature: Simple, Precise, Procedure-oriented • Classic Compilers: Turbo Pascal, Borland Pascal, Free Pascal • Extension: Object Pascal, Delphi
First Pascal Program • program Hello; • begin • WriteLn('Hello, world!'); • end.
Program Structure • program ProgramName; • const • { Constant Declarations } • type • { Type Declarations } • var • { Variable Declarations }
Program Structure • { Subroutine definitions } • begin • { Main program} • end.
Comments • { Comment } • (* Comment *) • // Line Comment, New in Delphi & Free Pascal
Identifiers • Name of programs, procedures, functions, types, constants, variables, etc. • Must begin with a letter or an underscore(_) • Can be followed by letters, digits, and underscores • NOT case-sensitive (i.e. ID=id=Id=iD)
Types • Simple Type • String Type • Structured Type • Pointer Type • Procedural Type
Simple Types • Ordinary Types • Integer Types • Char Types • Boolean Types • Real Types
Constants • const • Identifier = value; • // Cannot be modified • Identifier : Type = value; • // Can be modified
Constants • Example: • const • Name = 'Han Wentao'; // string • Message = 'That''s OK.'; // string • FirstLetter = 'a'; // Char • NewLine = #10; // Char • Year = 2003; // Integer • Pi = 3.141592653589793; // Real • IsInDebugMode = True; // Boolean • a : Real = 12; // Typed Real
Variables • var • Identifier : Type; • // Can be modified • Example: • var • i, j, Count : Integer; • FileName : string;
Assignment • Symbol: := • Format: • Variable := expression; • Example: • i := $FF; • Count := 0; • FileName := 'berry10.out';
Operators • Arithmetic Operators (+, -, *, /, mod, div) • Logical Operators (not, and, or, xor, shl, shr) • Boolean Operators (not, and, or, xor) • Relation Operators (=, <>, <, >, <=, >=)
Assignment & Operators Examples • i := (123 + 456) * 789; • q1 := (1 + 10) div 3; // q1=3,Integer • q2 := (1 + 10) / 3; // q2=3.666667 • Value := 123; • Radix := 16; • Remainder := Value mod Radix; • // Remainder=11
Punctuation & Indentation • You MUST have a semicolon(;) following: • the program heading • each constant definition • each variable declaration • almost all statements • Indentation is not necessary but useful. It makes your program readable.
Program Task 1 • Input 3 real numbers, a, b, c, from keyboard, print out the 2 roots of the equation ax2+bx+c=0 on the screen. It is guaranteed that the roots must exist. • Sample Input • 1 -3 2 • Sample Output • 2 1
My Solution for Task 1 • program Task1; • var • a, b, c, Delta: Real; • begin • Read(a, b, c); • Delta := Sqr(b) - 4 * a * c; • WriteLn((-b + Sqrt(Delta)) / (2 * a)); • WriteLn((-b - Sqrt(Delta)) / (2 * a)); • end.
Input • Read(<Variable1>, <Variable2>, …); • // does not skip to the next line unless necessary • ReadLn(<Variable1>, <Variable2>, …); • // just a Read procedure that skips to the next line at the end of reading
Output • Write(<Expression1>, <Expression2>, …); • WriteLn(<Expression1>, <Expression2>, …); • // skips to the next line when done
Formatting Output • <Expression> : <Field Width> • for reals: • <Real Expression> : <Field Width> : <Decimal Field Width>
Output Example • Write('Hi' : 10, 5 : 4, 5673 : 2); • ********Hi***55673 • Write(573549.56792 : 20 : 2); • ***********573549.57 • Write(123.345 : 0 : 2); • 123.35 • // * represents a space
Text Files • Declaration: • var • FileVar : Text;
Access a File • Assign(<FileVar>, 'File Path & Name'); • for input: Reset(<FileVar>); • for output: Rewrite(<FileVar>); • and DO NOT forget: • Close(<FileVar>); • at last!
Read and Write File • Read/ReadLn(<FileVar>, <Variable1>, <Variable2>, …); • Write/WriteLn(<FileVar>, <Expression1>, <Expression2>, …);
A Shortcut • for input: • Assign(Input, 'File Path & Name'); • Reset(Input); • for output: • Assign(Output, 'File Path & Name'); • Rewrite(Output); • … • Close(Output); // DO NOT FORGET
Test End of Line & End of File • Eoln(FileVar : Text) : Boolean; • Eof(FileVar : Text) : Boolean;
Program Task 2 • Read an angle from file trigono.in in degrees. Write the function sin, cos, tan, cot, sec and csc of the angle to the file trigono.out, rounded to 4 decimals. It is guaranteed that the angle is valid.
Program Task 2 • Sample Input (trigono.in): • 30 • Sample Output (trigono.out): • 0.5000 • 0.8660 • 0.5774 • 1.7321 • 1.1547 • 2.0000
My Solution for Task 2 • program TrigonometricFunctions; • const • InputFileName = 'trigono.in'; • OutputFileName = 'trigono.out'; • var • Deg, Rad, SinA, CosA: Real; • begin • Assign(Input, InputFileName); • Reset(Input); • Assign(Output, OutputFileName); • Rewrite(Output); • Read(Deg);
My Solution for Task2 • Rad := Deg / 180 * Pi; • SinA := Sin(Rad); • CosA := Cos(Rad); • WriteLn(SinA : 0 : 4); • WriteLn(CosA : 0 : 4); • WriteLn(SinA / CosA : 0 : 4); • WriteLn(CosA / SinA : 0 : 4); • WriteLn(1 / CosA : 0 : 4); • WriteLn(1 / SinA : 0 : 4); • Close(Input); • Close(Output); • end.
Sequential Control • Sequential control is the default. The computer executes each statement and goes on to the next statement until it sees an end.
Boolean Expressions • Precedence • - not • * / div mod and shr shl • + - or xor • = <> < > <= >= • Complex Boolean • 3 > 5 or 650 < 1 // WRONG • (3 > 5) or (650 < 1) // CORRECT
Real Value Comparison • DO NOT compare two real values with operator =. Small round-off errors may cause two equivalent expressions to differ. • Instead, use this comparison: • const Epsilon = 1E-10; • Abs(x1 - x2) <= Epsilon
Statement • Assignment • Subroutine Call • goto • Compound Statement • Conditional Statement • Repetitive Statement
Compound Statement • begin • Statement1; • Statement2; • … • end;
IF Statement • if <BooleanExpression> then • Statement; • OR • if <BooleanExpression> then • Statement1 • else • Statement2;
IF Statement Pitfall • if <BooleanExpression1> then • if <BooleanExpression2> then • Statement1 • else • Statement2;
IF Statement Pitfall Correction • if <BooleanExpression1> then • begin • if <BooleanExpression2> then • Statement1 • end • else • Statement2;
IF Statement Extension • if <BooleanExpression1> then • Statement1 • else if <BooleanExpression2> then • Statement2 • else if … • … • else • Statement n;
CASE Statement • case <OrdinalExpression> of • <OrdinalValueList1>: Statement1; • <OrdinalValueList2>: Statement2; • … • else Statement • end;
FOR Statement • for <OrdinalVariable>:=<LowerBound> to <UpperBound> do • Statement; • OR • for <OrdinalVariable>:=<UpperBound> downto <LowerBound> do • Statement;