Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertMarcus Hetland Endret for 9 år siden
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 - 1000..1000;
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:9.53674E-07 Vantage:6.25000000000000E-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 0.0.. 10.0; Vi kan også tvinge typer til å benytte et spesifisert antall bit. type MyFixed is delta 0.1 range 0.0.. 10.0; 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;
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.