Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

ADA 95 – del6 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes.

Liknende presentasjoner


Presentasjon om: "ADA 95 – del6 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes."— Utskrift av presentasjonen:

1 ADA 95 – del6 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes

2 ADA95 for KDA Avanserte typer  Mere om strukturer  Varierende strukturer (Variant part)  Generisk rpogrammering

3 ADA95 for KDA Mere om strukturer type Matrix is array (integer range <>,integer range <>) of integer; type Square (order: integer) is record Mat:Matrix(1..order,1..order); end record; Var1 : Square(3); Var2 : Square := (3,(1..3 => (1..3 => 0))); begin Var1.order := 10; Var1.Mat(1,1) := 10;

4 ADA95 for KDA type Matrix is array (integer range <>,integer range <>) of integer; subtype index is integer range 1..10; type Square (order: index ) is record Mat:Matrix(1..order,1..order); end record; Var1 : Square(3); Var2 : Square := (3,(1..3 => (1..3 => 0))); Var3 : Square; begin Var1 := (4,(1..4 => (1..4 => 0))); Var2 := (4,(1..4 => (1..4 => 0))); Var3 := (4,(1..4 => (1..4 => 0))); :=1

5 ADA95 for KDA Varierende strukturer (Variant part)  Vi kan i ada lage strukturer som varierer i innhold.  Dette gjøres ved å putte en case setning inne i type deklarasjonen.

6 ADA95 for KDA Varierende strukturer type X is record Y:Valgtype; case Y is when Valg1=> i : integer; when Valg2 => f : float; end case; end record;

7 ADA95 for KDA Varierende strukturer eksempel type BilType is (Sportsbil,Lastebil,Personbil,Buss); type BilInfo(Bil : BilType) is record RegNr : String(1..7); case Bil is when Sportsbil => MotorHK : integer; when Lastebil => Nyttelast : float; Henger : boolean; when Buss => AntallPas : integer; when Personbil => null; end case; end record;

8 ADA95 for KDA procedure main is type BilType is (Sportsbil,Lastebil,Personbil,Buss); type BilInfo(Bil : BilType) is ::::::::::::: end record; MinBil : BilInfo(Lastebil); MinBil2 : BilInfo(Sportsbil); begin MinBil.RegNr := "KT00000"; MinBil.Nyttelast := 10.5; MinBil.Henger := false; MinBil2.RegNr := "KT00001"; MinBil2.MotorHK := 564; end prog2;

9 ADA95 for KDA Generiske enheter  Deklarasjoner og bruk  Typer som parametere  Underprogrammer som parametere  Matte biblioteket

10 ADA95 for KDA Deklarasjoner og bruk  Til dere som kan templates i C++, det er forskjeller å legge merke til.  Vi tar først det klassiske eksemplet SWAP. procedure Swap(A,B:in out MyType) is T : MyType; begin T := A; A := B; B:= T; end Swap;

11 ADA95 for KDA Swap Spek: generic type ITEM is private; procedure Exchange(A,B : in out ITEM); Body: procedure Exchange(A,B:in put ITEM) is T:ITEM; begin T := A; A := B; B:= T; end Exchange; Før bruk: Procedure Swap is new Exchange(Integer);

12 ADA95 for KDA Generiske pakker generic MAX: Positive; type ITEM is Private; package Stack is procedure Push(X:ITEM); function Pop return ITEM; end Stack; width Stack; package IntStack is Stack(100,Integer); begin

13 ADA95 for KDA Typer som parametere  Type T is private;  Type T is limited private;  Type T is (<>);  Type T is range <>;  Type T is digits <>;  Type T is delta <>;

14 ADA95 for KDA Tabelltyper Generic type Index is (<>); type Floating is digits <>; type Vector is array (Index range <>) of Floating; function Sum(A:Vector) return Floating; function Sum(A:Vector) return Floating is Result : Floating := 0.0; begin for I in A’Range loop Result := Result + A(I); end loop; return Result; end Sum;

15 ADA95 for KDA type VectorType is array (Integer range <>) of Float; function Sum_Vector is new Sum(Integer,Float, VectorType); MyVector: VectorType(1..5); VectorSum: Float := 0.0; begin MyVector(1) := 1.1; MyVector(2) := 2.2; MyVector(3) := 3.3; MyVector(4) := 4.4; MyVector(5) := 5.5; VectorSum := Sum_Vector(MyVector); Float_io.put(VectorSum); -- og ut kommer 16.5 end;

16 ADA95 for KDA Underprogrammer som parametere  En genrisk parameter kan også være et underprogram.  Tenk f.eks på en funksjon som skal sortere en tabell.  Definisjonen ligner på sum eksemplet, men vi har i i tillegg brukt for operatoren ”>”

17 ADA95 for KDA Generic type Index is (<>); type Item is (<>); type Vector is array (Index range <>) of Item; procedure Sort(C:in out Vector); procedure Sort(C:in out Vector) is Min : Index; Tmp : Item; begin for I in C’First.. Index’Pred(C’Last) loop -- C’Last-1 Min := I; for J in Index’Succ(I)..C’Last loop if C(j) < C(Min) then Min := J; end if; end loop; Tmp := C(I); C(I) := C(Min); C(Min) := Tmp; end loop; end Sort; with function”<”(X,Y:Item) return Boolean;

18 ADA95 for KDA Bruk av Sort type VectorType is array (Integer range <>) of Integer; procedure SortVector is new Sort(Integer, Integer, VectorType, ”<”); procedure RevSortVector is new Sort(Integer, Integer, VectorType, ”>”); MyVector: VectorType(1..5);

19 ADA95 for KDA Numeriske typer  Heltallstyper  Kommatallstyper –Flytende komma –Fast komma

20 ADA95 for KDA Heltallstyper  Vi har samme problemet i ada som i mange andre språk, at størrelsen på en ferdig definert type ikke er fast. (Den er kompilator avhengig)  Dette gjør at man er oppfordret til slike ting: type MyInteger is range ;

21 ADA95 for KDA Flytende komma  Floatingpoint typer lages ved: type Real is digits 10; Hvordan dette gjøres er kompilator avhengig. type MyFloat is digit 1; MyFloat’Digit -- Skriver ut antall digits MyFloat’Epislon -- Skriver ut avstangen ifra 1.0 til neste verdi Gnat: E-07 Vantage: E-02

22 ADA95 for KDA Fast komma  Benyttes der vi ikke har eller ikke ønsker å benytte flytende komma. type MyFixed is delta 0.1 range ;  Vi kan også tvinge typer til å benytte et spesifisert antall bit. type MyFixed is delta 0.1 range ; for MyFuixed’size use 8; -- bruker minimum 8 bit

23 ADA95 for KDA Triks med strenger  Vi må alltid sette lengden på strenger.  Men vi kan nå utnytte det vi har gjennomgått til å lage noe ala: type V_STRING(N:Positive := 1) record s : String(1..N); end record;

24 ADA95 for KDA Triks med strenger Vi kan da lage strenger slik: declare Text : V_String; begin V_String := (5,”Hallo”); end;

25 ADA95 for KDA Hvordan unngå å spesifisere lengden på en streng function ”+”(S:String) return V_String begin return (S’length,S); end ”+”; declare Text : V_String; begin Text := +”Dette er en tekst”; end;

26 ADA95 for KDA with text_io; procedure prog1 is type V_STRING(N:Natural := 1) is record s : String(1..N); end record; Text : V_String; function "+"(S:String) return V_String is begin return (S'length,S); end "+"; begin Text := +"Dette er en tekst"; text_io.put_line(Text.s); end prog1;


Laste ned ppt "ADA 95 – del6 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes."

Liknende presentasjoner


Annonser fra Google