View
234
Download
1
Category
Tags:
Preview:
Citation preview
Types in Modula 2• Simple Types: values can’t be decomposed
– Ordinal Types: bijection with natural numbers– Reals: approx. representation for real values– Pointers: addresses in data memory
• Structured Types: Values have # components– Arrays: all components have same type– Records: components can have # types– Sets: small sets of ordinal values – Procedures: entire subprograms
Types in Modula 2• Simple Types: values can’t be decomposed
– Ordinal Types: bijection with natural numbers– Reals: approx. representation for real values– Pointers: addresses in data memory
• Structured Types: Values have # components– Arrays: all components have same type– Records: components can have # types– Sets: small sets of ordinal values – Procedures: entire subprograms
ARRAY applicationsMon SunSatFriThuWedTue
8
191817161514131211109
info.
teleNteleN
st.pr.teleE st.pr.teleE st.pr.
st.pr.info.st.pr.info.st.pr.info.
ARRAY applications
TYPEDay = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);Hour = [8..19];Course = ARRAY[0..10] OF CHAR;Schedule = ARRAY Day, Hour OF Course;
VARRoomK1 : Schedule;
BEGIN...RoomK1[Wed,8] := "info.";...
END
Sieve of EratosthenesPrint all primes <= Max
Make a set of cardinals 2 <= x <= MAX
FOR all cardinals present in set
Print the first cardinal xremaining in the setRemove all multiples of xfrom the set
Sieve of EratosthenesMake a set of cardinals 2 <= x <= MAX
CONST Max = 1000;VAR Sieve : ARRAY[2..Max] OF BOOLEAN; i : [2..Max];.. .FOR i:= 2 TO MAX DO Sieve[i] := TRUEEND; (* FOR *)
2 876543 ...FALSE FALSEFALSEFALSE TRUE TRUE TRUE
Sieve of EratosthenesFOR all cardinals present in the set
Print the first cardinal in the setRemove all multiples of it
VAR p : CARDINAL;.. .FOR i := 2 TO Max DO IF Sieve[i] THEN p := i; WriteCard(p,5); WriteLn; WHILE p <= Max DO Sieve[p] := FALSE; p := p + i END (* WHILE *) END (* IF *)END (* FOR *)
Types in Modula 2• Simple Types: values can’t be decomposed
– Ordinal Types: bijection with natural numbers– Reals: approx. representation for real values– Pointers: addresses in data memory
• Structured Types: Values have # components– Arrays: all components have same type– Records: components can have # types– Sets: small sets of ordinal values – Procedures: entire subprograms
Repairing a flat tire
Refinement of “tools”
• Tools :– Jack : device to lift a car– Wrench : device to loose or fasten bolts
RECORD example
TYPE Date = RECORD Day : [1 .. 31]; Month : [1 .. 12]; Year : [1900 .. 2100] END;VAR Today : Date;
RECORD element
record variable designator field identifier
Today.Day := 20;Today.Month := 10;Today.Year := 1998;
WITH Today DO Day := 20; Month := 10; Year := 1998;END
Nested RECORDs example (1)TYPE
Date = RECORD Day : [1 .. 31]; Month : [1 .. 12]; Year : [1900 .. 2100] END; String = ARRAY [0..29] OF Char; Identity = RECORD Name, FirstName : String; BirthPlace : String; BirthDate : Date; IssueDate : Date; END;VAR Myself : Identity; Today : Date;
Nested RECORDs example (2)
Today.Day := 20;Today.Month := 10;Today.Year := 1998
Myself.Name := "Tiberghien";Myself.FirstName := "Jacques";Myself.BirthPlace := "Berchem";Myself.BirthDate.Day := 1;Myself.BirthDate.Month := 4;Myself.BirthDate.Year := 1946;Myself.IssueDate := Today;
Nested RECORDs example (2)WITH Today DO
Day := 20; Month := 10; Year := 1998END;WITH Myself DO Name := "Tiberghien"; FirstName := "Jacques"; BirthPlace := "Berchem"; WITH BirthDate DO Day := 1; Month := 4; Year := 1946; END; IssueDate := Today;END
Variant RECORD
with explicit tag fieldCar = RECORDWeight : CARDINAL;NumberDoors : CARDINAL;FrameId,EngineId : ARRAY[0..19] OF CHAR;Fuel :(Gasoline,FuelOil,LPG,Electricity);CASE Engine :(Explosion,Electricity) OFExplosion : NbrCylinders : CARDINAL;VolCylinders : CARDINAL |Electricity :Supply : (AC,DC);Voltage : CARDINAL;END;END;
Variant RECORD
with implicit tag fieldCar = RECORDWeight : CARDINAL;NumberDoors : CARDINAL;FrameId,EngineId : ARRAY[0..19] OF CHAR;Fuel :(Gasoline,FuelOil,LPG,Electricity);CASE (Explosion,Electricity) OFExplosion : NbrCylinders : CARDINAL;VolCylinders : CARDINAL |Electricity :Supply : (AC,DC);Voltage : CARDINAL;END;END;
Types in Modula 2• Simple Types: values can’t be decomposed
– Ordinal Types: bijection with natural numbers– Reals: approx. representation for real values– Pointers: addresses in data memory
• Structured Types: Values have # components– Arrays: all components have same type– Records: components can have # types– Sets: small sets of ordinal values – Procedures: entire subprograms
Recommended