Simple Data Types

advertisement
Pascal Midterm 2 Review
Chapter 7 - Procedures
When to use procedures – if it makes the overall program easier to understand.
Order of Declarations
Constant declarations
Variable declarations
Procedure and/or function declarations
Main part
A Simple Pascal Program with added procedure
PROGRAM SimpleWithProcedure(INPUT, OUTPUT);
CONST
MyCount = 3;
VAR a, b, c : INTEGER;
d : REAL;
PROCEDURE multiply(VAR b:INTEGER; a: INTEGER);
BEGIN
b := a * MyCount;

b=3*3 = 9
END;
BEGIN
a := MyCount;
multiply(b,a); (* calling multiply procedure*)
c := b div 3;

c = 9 div 3 = 3
d := (b + a)/ 5;

d = (3+9)/5 = 12/5=2.4
END.
A Simple Pascal Program with added procedure(formal and actual parameters)
PROGRAM SimpleWithProcedure(INPUT, OUTPUT);
CONST
MyCount = 3;
VAR a, b, c , I , j: INTEGER;
d : REAL;
(*declaring procedure with formal parameters x and y*)
PROCEDURE multiply(VAR x:INTEGER; y: INTEGER);
BEGIN
x := y * MyCount;
END;
BEGIN
a := MyCount;
j := MyCount+5;
multiply(b,a); (* calling multiply procedure with actual parameters a and b*) 
multiply(I,j); (* calling multiply procedure with actual parameters I and j*) 
c := b div 2;
d := (b + a)/ 2;
END.


c := 16 divided by 2:= 8
d := (16+2)/ 9.0
b = 3*3 = 9
I = (3+5) * 4 = 32
A Simple Pascal Program with added procedure(Local Variables )
PROGRAM SimpleWithProcedure(INPUT, OUTPUT);
CONST
MyCount = 3;
VAR a, b, c , I , j: INTEGER;
d : REAL;
(*declaring procedure with formal parameters x and y*)
(*procedure multiply gets the address of the first variable
and a copy of the value of the second variable*)
PROCEDURE multiply(x:INTEGER; VAR y: INTEGER);
(* z is local variable*)
VAR z: INTEGER;
BEGIN
y:=0;
FOR z := 1 TO x DO (* for z = 1 to 3 x is b *)
y := y + z * MyCount;
END;
BEGIN
a := MyCount;
b:=0;
i := MyCount+5;
j:=0;
multiply(a,b); (* calling procedure multiply with actual parameters a and b*)
multiply(I,j); (* calling procedure multiply with actual parameters I and j *)
writeln(‘ value of b= ‘ ,b);
writeln(,value of I = ‘ , I);
END.
Befor calling procedure multiply with a and b
a= 3 b is undefined
calling procedure multiply with a and b
actual parameters a and b are represented in the procedure as x and y so:
x=3 y=0
When for loop is executed
z=1
 y = y+ z * MyCount  y = 0 + 1 * 3 = 3
z=2
 y = y+ z * MyCount  y = 3 + 2 * 3 = 9
z=3
 y = y+ z * MyCount  y = 9 + 3 * 3 = 18
after calling procedure multiply with parameters a and be a is not changed and b = 18
In main program the statement writeln(‘ value of b= ‘ ,b); displays value of b = 18
Befor calling procedure multiply with i and j
i= MyCount + 5  3+5 = 8 j is undefined
calling procedure multiply with i and j
actual parameters i and j are represented in the procedure as x and y so:
x=5 y=0
When for loop is executed
z=1
 y = y+ z * MyCount  y = 0 + 1 * 3 = 3
z=2
 y = y+ z * MyCount  y = 3 + 2 * 3 = 9
z=3
 y = y+ z * MyCount  y = 9 + 3 * 3 = 18
z=4
 y = y+ z * MyCount  y= 18+ 4*3 = 30
z=5
 y = y+ z * MyCount  y = 30 + 5*3 = 45
after calling procedure multiply with parameters a and be a is not changed and b = 18
In main program the statement writeln(‘ value of j= ‘ ,j); displays value of j = 45
Chapter 8 –Nesting
Scope Rules
Begin (*Main part of the program*)
End
Procedure A can only be called in main program.
Procedure B can be called in procedure C and A but not in the main program.
Procedure C can only be called in procedure A
main module - Items Visible: Char1, procedure One and Three
Procedure one- Items Visible: char2, two,
Procedure two – Items visible: char3, char2, char1
Procedure three- Items Visible: char1, One, char4
Functions
Functions – Functions are very similar to procedures. The Difference is that functions are employed when the
result is a single value that is used directly in an expression. For example, ISVALID() is a typical function.
FUNCTION identifier parameter-list : type;
Program Exaple(input, output)
Var area: double;
Max : integer;
FUNCTION CircleArea(radius: DOUBLE): DOUBLE;
VAR area: DOUBLE;
BEGIN
area := PI * radius * radius;
CircleArea:= area;
END;
FUNCTION Highest(v1, v2, v3: INTEGER): INTEGER;
begin
if (v1 > v2) and (v1 > v3) then
begin
result := v1;
end
else if v2 > v3 then
begin
result := v2;
end
else
begin
result := v3;
end;
Highest:=result;
end;
BEGIN (*main program*)
area := CircleArea(10.0);
maxBy2 := Highest(10, 3, 18) * 2;
END.
The function name IS NOT a variable add the assigned parameters.
Do not use a function if more than one value is returned .
Do not use var for parameters.
Do not use if inputting or outputting a value.
Use if only one value is returned
Precision
Real numbers
example
Precision: numbers after
.
5.4321  precision =4
sign digits.digits
-34.67
Sign digits.digits E sign digits 4,321.768  4.321768×103 normalized scientfic notation 4.32176 E 3
In normalized scientific notation
least one but less than ten (1 ≤ |a| < 10).
the exponent b is chosen so that the absolute value of a remains at
Standard decimal notation Normalized scientific notation Scientific E notation
2
2×100
2E 0
300
3×102
3E2
4,321.768
4.321768×103
4.32176 E 3
−53,000
−5.3×104
-5.3 E 4
6,720,000,000
6.72×109
6.72 E 9
0.2
2×10−1
2 E -1
0.000 000 007 51
7.51×10−9
7.51 E -9
Significant digits:
number of digits regardless of the whole value
Formatting real numbers:
Actual number
without formatting
x = 4321.768
4.32176 E 3
with proper formatting variable: space used: precision
x:8:3  4321.768
x:10:4  □□4321.7680
x:8:2  □ 4321.77
Simple Data Types
Data Types – A data type is a formal description of the values that a can be stored in a constant or variable of that
type and the operations that can be applied to these values.




integer
real
char
boolean
Ord, Pred, and Succ Functions
predefined Pascal functions that take a parameter and return a value.
Great example in naming formal and actual parameters differently.
ORD – takes an ordinal value and returns an Integer representing the value’s place in the ordering of the data
Examples: Integer returns integer ord(23)  23
Boolean returns 0 or 1. Ord (true)  1 ord false  0
Character returns the ascii value ord(‘A’)  66
PRED Pred – takes an ordinal value and returns the value’s predecessor (with ascii value decreased by one).
Example: PRED(‘A’)  ‘@’
PRED(‘Z’)  ‘Y’
SUCC – takes an ordinal value and returns the value’s successor( with asscii value increased by one).
Example: SUCC(‘A’)  ‘B’
SUCC (‘Z’)  ‘[‘
ascii value for ‘Z’ is 90 and for ‘[‘ is 91
CHR - Chr is the inverse of the Ord operation. It takes an integer value and returns corresponding character
representation.
Example: CHR(65)  ‘A’
CHR(ord(‘A’) + 3)  CHR (65 + 3)  CHR (68)  ‘D’
type.
Control Structures
CASE Statement -- Example:
program Grades;
var
grade: char;
begin
writeln(‘Enter Grade’);
read(grade);
CASE grade OF
'A' : writeln('Excellent!' );
'B','C': writeln('Well done' );
'D' : writeln('You passed' );
'F' : writeln('Try again' );
Look at the valiable grade
if it is = ‘A’ then writeln(‘Excellent!!’)
if it is = ‘B’ or ‘C’ then writeln(‘Well done’)
if it is = ‘D’ then writeln(‘you passed’)
if it is = ‘F’ then writeln(‘Try again’)
ELSE WRITELN(‘Letter grades should be ‘A’ to ‘F’);
END; Must to use keyword ‘end’ to complete the case statement.
LOOPs
REPEAT Statement :
REPEAT Do it at least one time
statement;
Example
REPEAT
sum := sum + number;
number := number - 1;
UNTIL number = 0;question asked
statement;
if the answer is true stop
UNTIL Boolean expression ask a question if the answer is false go back up to the keyword REPEAT
For loop
Example:
FOR variable:= initial_value TO final_value DO
BEGIN
statement;
END;
FOR i:= 1 TO 10 DO
BEGIN
writeln(i);
END;
Example:
FOR variable:= initial_value DOWN TO final_value DO
Begin
statement;
end;
While loop
WHILE I < 10 DO
BEGIN
WRITELN(I);
I := I +1;
END
FOR i:= 10 DOWN TO 1 DO
Begin
writeln(i);
end;
User-Defined Ordinal Data Types
program StudentMarksSystem;
CONST
NumStudents = 30;
TYPE
Range = 1.. NumStudents;
IntegerArray = array [Range] of Integer;
VAR
Class1Agrads : IntegerArray;
Class1Bgrades : IntegerArray;
Grade, ndx:INTEGER;
PROCEDURE enterGrades(StudentArray : IntegerArray)
BEGIN
FOR ndx := 1 TO NumStudents DO
BEGIN
Read (grade);
StudentArray [ndex] := grade;
END;
END; (*of enter grade procedure *)
BEGIN(*main program*)
enterGrade(MarksForClass1A);
enterGrade(MarksForClass1B);
END.(*end of main program*)
Composite Data types: Files and Arrays
Why Arrays:
Readln(inputData, value1);
Readln(inputData, value1);
Readln(inputData, value1);
.
.
Readln(inputData, value1000);
Writeln(value1000);
Writeln(value999);
Writeln(value998);
.
.
Writeln(value1);
For I :=1 to 1000 do
begin
Readln(inputData, dataAry[i];
Writeln(dataAry[i]);
End;
One-Dimensional Arrays
Defining Arrays:
<arrayName> : ARRAY[n..m] OF <Data Type>;
Example:
intArray : ARRAY[1..20] OF INTEGER;
charArray: ARRAY[1..20] OF CHAR;
Using for loops with arrays
Sum = 0;
FOR i:=1 TO 20 DO
BEGIN
sum:= sum + intArray[i];
END
(*different ways to see the value of an array location or use it *)
charArray[5] = ‘A’
WRITHELN(charArray[10]);
Passing arrays, always by reference
PROGRAM arrayToFunction;
CONST
size = 5;
TYPE
a = ARRAY [1..size] OF INTEGER;
VAR
balance: a;
PROCEDURE calSum( VAR arr: a);
VAR
i , sum: INTEGER;
BEGIn
sum := 0;
FOR i := 1 TO size DO
sum := sum + arr[i];
WRITELN(sum);
END;
BEGIN (* main body of program*)
WRITELN(‘calculating sum of numbers in balance array’);
(* Passing the array to the procedure *)
calSum(balance);
END.
Batch Input/Output
We need to use files to enter massive data and save the massive results.
To use files for reading and writing first we put the name of the files in the program header.
Program something(infile, outfile);
Then we declare then in var section
Var infile, outfile:TEXT
Then we open the files for reading and writing in the beginning of the program
Reset (infile);
for reading
Rewrite(outfile); for writing.
To read from a file:
Read(infile, data);
To write to a file:
Write(outfile, data);
Download