Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ADMIN BUCH BROWN KAPITEL 3 18.04.
- ALLE MÖGLICHKEITEN ADMIN BUCH
- -- DEKLARATION
- ---------------------MODULARE DATEN TYP
- type INDEX_T is mod 7;
- N : INDEX_T := 6;
- N:= N+1; -->0 wird automatisch wider 0 und dann 1 , 2 ,3,4,5,6,0
- -- Enumeration_IO
- type FARBEN_T is (Rot, Gelb, Gruen, Blau, Schwar);
- Farbe : FARBEN_T :=Rot;
- package FARBEN_IO is new Ada.Text_IO.Enumeration_IO(FARBEN_T);
- ---------------INTEGER----------------------------------------------------
- I_POS : Integer :=1;
- package INTEGER_IO is new Ada.Text_IO.Integer_IO(INTEGER);
- -- Posetive ganze Zahlen
- I_Eingabe : NATURAL :=0; -- NATURLICHE ZAHLEN von 0 ...
- I_Eingabe : Positive :=1; -- POSITIVE NATURLICHE ZAHLEN 1 ...
- I_Eingabe : constant Positive :=1; -- CONSTANTE Zahl
- package POS_IO is new Ada.Text_IO.Integer_IO(INTEGER);
- ----------------FLOAT-----------------------------------------------------------------
- Mwst : FLOAT :=19.0;
- Mwst : constant FLOAT :=19.0; -- CONSTANTE Zahl
- package FLOAT_IO is new Ada.Text_IO.Float_IO(FLOAT)
- Ada.Text_IO.Put("Geben Sie MWST ein :");
- FLOAT_IO.Get(Mwst);
- ----------------Reihung /Array----------------------------------------------
- type WOCHENTAG_T is (Mo,Di,Mi,Don,Fr,Sa); -- "constrained"
- type MESSWERTE_TA is array (WOCHENTAG_T) of Integer; -- "constrained"
- type REIHE1_TA is array (Integer range <>) of Integer; -- "unconstrained" --> Range nicht vordefiniert mus dafür später definiert werden
- type REIHE1_TA is array (POSITIVE range <>) of BOOLEAN ;-- "unconstrained"
- Zustand : REIHE1_TA(1 .. M) :=(others=>True);
- Messwert : MESSWERTE_TA ;
- Messwert : MESSWERTE_TA :=(1,2,3,4,5,6)-- Jede position von aray wird ein wert reingeschrieben
- Reihe1 : REIHE1(1..5) :=(1=>1,2..4=>0,5=>2); -- IN erste wird 1 reingeschrieben in 2..4 0,in letzte wird 2 geschpeichert
- Reihe1 : REIHE1(1..5) :=(others=>0); -- IN alle ein 0 reinschreiben
- Reihe1 := (1,2,3,4,5);
- Reihe1(3..5) := (1,2,3);
- Reihe1 : REIHE1(1..5);
- Reihe2 : REIHE1(1..10);
- Reihe3 : REIHE1(11..20);
- Reihe2(1):=Reihe1(1);
- Reihe2(1..5):= Reihe1(1..5);
- Reihe2(6..10):=Reihe1;
- Reihe2(1..6):= Reihe1&6-- mit & kann man restliche kästchen füllen
- ------------------------STRING---------------------------------------------------
- subtype STRING_TA is STRING(1..5);
- type ANZAHL_T is range 1 .. 12;--
- type HOERSAAL_TA is array (ANZAHL_T range <>) of STRING_TA ;-- maximal 12 gros darf aber kleiner sein wegen range <> unconstrained
- type HOERSAAL_TA is array (ANZAHL_T) of STRING_TA ; --Constrained genau von länge 12
- Hoersaal : HOERSAAL_TA(1..10):= ;
- Hoersaal : HOERSAAL_TA(1..10):= (others=>(Others=>'_') );-- Schreib (in alle 10(in alle 5 string komponenten ein _ rein )
- Hoersaal(3)(1..3):= "MAX";
- Hoersall : HOERSAAL_TA :=
- ---------------STRING----------------------------------------------
- subtype STRING_TA is STRING(1..5);
- Eingabe : STRING(1..10):= (other=>" ");
- : STRING := (" ");
- Text1 : STRING := ("Hallo ....);
- Text2 : STRING := (Text1'Frist . . Text1'Last=>' ');
- LetzteIndex : NATURAL:=0;
- Char := Text(i);
- if Text1(Index) in 'A' .. 'Z'; then
- if CHARACTER'Pos(Char) in 65 .. 90 then
- Char := CHARACTER'Val(CHARACTER'Pos(Char) + 32); -- Aus eine Große wird kleine Buchstabe
- Text2(Index):= CHARACKTER'VAL(CHARACKTER'POS(Text(Index))+32);
- end if;
- --------------------------------------------------------------------
- begin
- Ada.Text_IO.Put (" Geben Sie en Name ein ");
- Ada.Text_IO.Put_Line("TEXT");
- Ada.Text_IO.Get(Eingabe); -- Gibt einzelne zeichen ,nach einander , Skip_Line immer nötig!!!!!
- Ada.Text_IO.Get_Line(Text,Index); -- Gibt alles aus was drin ist
- if Index = Text'Last then
- Ada.Text_IO.Skip_Line; -- Lehrt den puffer
- end if;
- ----------------------------------------------------------------Ausgabe in Einem satz tex + Integer--------
- Ada.TEXT_IO.PUT("Ergebnis ="& INTEGER'IMAGE(Ergebnis));
- ------------------------------------------------------------------
- LetzteIndex : Integer;
- begin
- Ada.Text_IO.Skip_Line;
- Ada.Text_IO.Put(Eingabe);
- Ada.Text_IO.Put(Eingabe(1..3);-- Nur drei zeichen von 10 ausgeben
- Ada.Text_IO.Get_Line(Eingabe, LetzteIndex);
- Ada.Text_IO.Put(Eingabe(Eingabe'First..LetzteIndex);
- --Anweisungsteil
- Ada.Text_IO.Get_Line(Eingabe,LetzteIndex);
- if LetzteIndex=Eingabe'Last then
- Ada.Text_IO.Skip_Line;
- end if;
- --begin
- Messwer(Mi):=5;
- Messwert(FR):=Messwete(Mi);
- Messwert(Don . . Sa) := MEsswert (Mo..Mi);
- Messwert(Mi . . Mi) := 5 ; XXXX -- Nichtmöglich Feller
- for Index in Rehe1'Range loop -- und nicht for in INTEGER'Range und nict REIHE1_TA'Range
- -- sonst wird zwei miliarden mal schleife laufen
- null;
- end loop;
- --Eingabe
- -----------------------------SCHLEIFEN------------------------------------
- --------------------------For SCHLEIFE-----------------------------------
- --for i in reverse 0..I_Eingabe loop -- Schleife zählt rückwerts
- for i in 0..I_Eingabe loop
- I_POS := I_Eingabe mod 5;
- end loop;
- -- i wird nur in der Schleife benutzt braucht nicht deklariert werden,nach derschlefe verschwindet
- ----------------Schleife in schleife um Zeilen und Spalten Darzustellen Ausrechnen
- for i in 2..I_n loop -- NEU ZEILE
- Integer_IO.Put(i,Width => 4);
- Ada.Text_IO.Put(" !");
- for a in reverse 2 .. I_p loop -- NEU SPALTE
- I_Ausgabe_p := i ** a;
- -- Integer_IO.Put(a,Width => 0);
- Integer_IO.Put(I_Ausgabe_p,Width => 4);
- Ada.Text_IO.Put(" !");
- end loop;
- Ada.Text_IO.New_Line;
- end loop;
- ----------------------- FUSGEsTEUERTE SCHLEIFE
- loop
- I_Antwort := I_Eingabe mod I_Index;
- exit when I_Antwort=0 or I_Index = I_Eingabe;
- I_Index :=I_Index+1;
- end loop;
- --------------------------- WHILE und CASE --------------------------------
- while Restgeld > 0 loop
- case Index is
- when 0 => teiler := 50;
- when 1 => teiler := 20;
- when 2 => teiler := 10;
- when 3 => teiler := 5;
- when 4 => teiler := 2;
- when 5 => teiler := 1;
- when others => null ;
- end case;
- Menge:= Restgeld / teiler;
- if Menge /= 0 then
- Integer_IO.Put(Menge,0);
- Ada.Text_IO.Put(" * ");
- Integer_IO.Put(Teiler,0);
- Ada.Text_IO.Put(" Euro, ");
- Restgeld := Restgeld-Menge* Teiler;
- --Restgeld= Restgeld mod Teiler *** Sol selbe raus kommen wie oben ?
- end if ;
- Index := Index + 1 ;
- end loop;
- -------------------- EINGABE AUSGABE----------------------------
- Ada.Text_IO.Skip_Line; -- LEHRT Speicher
- Ada.Text_IO.Put_Line( "Fahrbwert:" ); -- Ausgabe Text_IO
- Integer_IO.Put(I_Index,Width => 0); -- Ausgabe INTEGER
- INTEGER_IO.Get(I_Eingabe); -- Eingabe INTEGER
- FARBEN_IO.Put(FARBEN_T'Aft(I_POS)); -- Ausgabe Selbsdefinierte Typen
- FARBEN_IO.Put(Farbe(I_POS)); -- Ausgabe Enumeration Aufzahlung
- FARBEN_IO.Put(FARBEN_T'Val(I_POS)); -- von wert aus Position I_POS
- FARBEN_IO.Put(FARBEN_T'First); -- Ausgabe Erstes Wertes aus Variaable
- FARBEN_IO.Put(FARBEN_T'Last); -- Ausgabe Letztes Wertes aus Variaable
- FARBEN_IO.Put(FARBEN_T'Min( , )); -- Zwei parameter von denen wird kleinste ausgegeben
- FARBEN_IO.Put(FARBEN_T'Max( , )); -- Zwei parameter von denen wird Groste ausgegeben
- FARBEN_IO.Put(FARBEN_T'Image( )); -- Integer in String umwandeln
- FARBEN_IO.Put(FARBEN_T'Range); -- Alle ausgeben
- FARBEN_IO.Put(FARBEN_T'Succ( )); -- nachste
- FARBEN_IO.Put(FARBEN_T'Pred( )); -- Vorherige ausgeben
- FARBEN_IO.Put(FARBEN_T'Length); -- Lenge von der
- FARBEN_IO.Put(FARBEN_T'Pos(Gruen)) -- Stelle von Gruen zurück / bei Char kommt ASCII raus
- -- CHARACTER'POS('A') = wert position zahl (hier: 65)
- -- CHARACTER'Val(65) = INHALT Buchstabe (hier: 'A')
- ---------------------Ausgabe auf dem Monitor---------------------------
- Enumeration --> Richtung
- ---------
- width
- Float : <-- Richtung
- -----.-----
- Fore Aft
- INTEGER <-- Richtung
- -------
- Width
- ------------------------------------Range---------------------------------
- Zustand'Range ist Gleich Zustand'Frist .. Zustand'Last
- ---------Record / Einfache verbund
- subtype STRING_10_TA is (1..10);
- type PERSON_TR is record
- Vorname : STRING_10_TA := (others=>' ');
- Nachname : STRING_10_TA := (others=>' ');
- Alter : NATURAL :=0;
- end record;
- Person : PERSON_TR ;
- Person2 : PERSON_TR := "Tobias ","Mustermann",55;
- begin
- Person.Vorname'(1..3) := "Max";
- Ada.TEXT_IO.Put(Person.Vorname);
- Person2:= Person;
- ---------------Aggregat
- Geburtstag : DATUM_TR := (19, 01, 1994);-- Aggregat
- -------------------BLÖCKE-------------------------------------------
- with Ada.Text_IO;
- procedure Main is
- --Haupt Programmm
- begin
- Kreis : --Blöck Begin
- declare
- Radius,Umfan,Flaeche : Float:=0.0;
- begin
- Ada.Text_IO.Put(" BItte Radius eingeben ");
- F_IO.get(Radius);
- end Kreis; -- Blöck Ende
- end Main; -- Hauptprogramm ende
- -------------------------UNTERPROGRAMME-------------------------
- --Spezifikation
- Wer1,Wert2 : INTEGER;
- Wert1 :=5;
- Wert2 :=3;
- procedure Swap (X,y :in out INTEGER); -- in -- wird wert in unterprogram mitgenomen
- -- INTEGER:=1) so kann man ein standart wert vordefenieren
- -- out -- wird wert von unterprogramm zurück gegeben
- -- in out -- wird mitgenomen verarbeitet und wider zuruckgegeben
- --Implementirung
- procedure Swap (X,Y : in out INTEGER) is
- hill : INTEGER := X;
- begin
- X :=Y;
- Y :=Hill;
- end Swap;
- begin
- Swap(Wert1,Wert2);-- proceduren stehen immer aleine
- -- Ergebnis inhalt von Wert1 ist =3 und Wert2 ist = 5 alles pasiert inerhalb der Unterprogramma
- bei in kön
- ------------------------FUNKTIONEN------------------------------
- --Rückgabewert
- --Anweisungsteil, inerhalb von Anweisungen / DEKLARATION : bei Initialisirungen nie alleine
- --Spezifikation
- function Add (X,Y : in INTEGER) return INTEGER;
- --Implementirung:
- function Add (X,Y : in INTEGER) return INTEGER is
- Ergebnis :INTEGER :=0;
- begin
- Ergebnis := X+Y;
- return Ergebnis;
- end Add;
- -- Ausgerufen wird funktion
- Integer_IO.Put(Add(Wert1 ,Wert2);--------------oder Integer_IO.Put(Add(3,5);
- --Ergebnis es wird summe von wert1 und Wert2 auf dem Monitor ausgegeben ;
- ---------------------CURSOR POSITIONIREN----------------------------
- Ada.Text_IO.Set_Col(45);--Cursor position an stelle 45 damit er immer an gleiche stelelle erschein
- -----------------------------------------------------------------------
- Ada.Text_IO.Skip_Line; -- UM in der Zeile zu bleiben und puffer lehren
- ------------------------------------------------------------
- ******************************ADMIN BUCH von NATALI ****************************************************************
- with Ada.Text_IO; -- Begin von jedem Ada-Programm
- with Ada.Numerics; -- bei verwendung von Pi und e = 2.71...
- beim rechnen mit Pi oder e Ada.Numerics.Pi/e
- procedure < Name der Aufgabe > is -- Name womit auch abgespeichert wird
- 1.13 -- reelles Literal
- 2345 -- ganzzahliges Literal
- 'a' -- Zeichenliteral
- "hallo" -- Zeichenkettenliteral (STRING)
- --------------------------------------------------------------------------------------------
- Skalare Datentypen
- DISKRETE DATENTYPEN
- Aufzaehlungstypen Ganzzahlige Typen
- Selbstdefinierte S.36 Selbstdefinierte S.43
- Vordefinierte Vordefinierte S.41
- 1. CHARACHTER S.37 1. INTEGER
- 2. BOOLEAN S.38 2. NATURAL 0 .. <>
- 3. POSITIVE 1.. <>
- Selbstdefinierte modular S.44
- Operatoren Operatoren
- 1. =, /=, <, >, <=, >= 1. =, /=, <, >, <=, >=
- 2. +; -; *; /; rem; mod; **;
- Attribute
- REELWERTIGE DATENTYPEN
- Fliesskommatypen Festpunkttypen
- Selbstdefinierte
- Vordifinierte
- 1. FLOAT S.47
- Operatoren
- 1. =, /=, <, >, <=, >=
- 2. +; -; *; /; rem; mod; **;
- --------------------------------------------------------------------------------------------
- -> Aufzaehlungstypen
- 1. Selbstdefinierte
- type FARBE_T is (Rot, Blau, Gelb);
- type HEX_ZIFFER_T is ('0', '1', '2', '3', .. 'F');
- -- Bezeichnung immer alle Buchstaben GROSS mit _T
- Farbe : FARBE_T := Blau; -- Bei Variablen immer der erste BUchstabe gross
- 2. Vordefinierte
- Char : CHARACHTER := 'A'; -- Es wird auf Vordef. Datentypen zugegriffen
- Bool : BOOLEAN := False;
- -> Ganzzahlige Datentypen
- 1. Selbstdefinierte
- type STUDENTEN_T is range 0 .. 23;
- type SEITEN_NUMMERN_T is range 1 .. 2000;
- 2. Selbstdefinierte modular
- type BYTE_T is mod 256; -- Bereich geht von 0 .. 255;
- -- => Wertebereichseinschraenkung
- type HASH_INDEX_T is mod 97;
- 3. Vordefinierte
- A : INTEGER := 2; -- geht von -<> .. <>
- B : NATURAL := 5; -- geht von 0 .. <>
- C : POSITIVE := 10; -- geht von 1 .. <>
- 4. Untertypen
- subtype SMALL_INT_T is INTEGER range -10..10;
- subtype TSN_T is POSITIVE;
- -> Fliesskommatypen
- 1. Selbstdefinierte
- type T3_T is digits 3; -- die Zahl ist auf 3 Stellen genau
- type Preis_T is 1.0 .. 10.0;
- 2. Vordefinierte
- A : FLOAT := 0.0;
- 3. Untertypen
- subtype F_IO is FLOAT range 5.0 .. 50.0;
- ---------------------------------------------------------------------------------------------
- Aufrufen der Packete zum Einlesen und Ausgeben
- package INTEGER_IO is new Ada.Text_IO.INTEGER_IO(INTEGER);
- package FLOAT_IO is new Ada.Text_IO.FLOAT_IO(FLOAT);
- package <Name des Datentyp>_IO is new Ada.Text_IO.Enumeration_IO(<Name des Datentyp>);
- ---------------------------------------------------------------------------------------------
- ATTRIBUTE auf DISKRETE Typen
- type HEX_ZIFFER_T is ('0', '1', '2', '3', .. 'F'); -- Aufzaehlungstypen
- type ZAHLEN_T is range -5 .. 5; -- ganzzahliger Datentypen
- T'First => das erste Element
- HEX_ZIFFER_T'First = '0'
- ZAHLEN_T'First = -5
- T'Last => das letzte Element
- HEX_ZIFFER_T'Last = 'F'
- ZAHLEN_T'Last = 5
- T'Val => der Wert einer Positionsnummer
- HEX_ZIFFER_T'Val(15) = 'F'
- ZAHLEN_T'Val = 2
- T'Pos => die Positionsnummer eines Wertes
- HEX_ZIFFER_T'Pos('A') = 10
- ZAHLEN_T'Pos(-3) = -3
- T'Pred => Vorgaenger eines Wertes
- HEX_ZIFFER_T'Pred('C') = 'B'
- ZAHLEN_T'Pred(3) = 2
- T'Succ => Nachfolger eines Wertes
- HEX_ZIFFER_T'Succ('B') = 'C'
- ZAHLEN_T'Succ(-3) = -2
- Die Attribute First, Last, Val, Pred und Succ liefern Werte des Typs T !
- Das Attribut Pos liefert einen Wert vom Typ universal_integer !
- -- Constrained wenn Nachfolger ausser Wertebereich
- ---------------------------------------------------------------------------------------------
- Datentyp STRING
- type STRING is array (POSITIVE range <>) of CHARACHTER; -- Vordefiniert in Ada.Text_IO
- subtype STRING_15_TA is array STRING(1..15);
- Ausgabe von STRINGS
- * Put(Item : in STRING);
- => Ausgabe einer Zeichenkette
- * Put_Line(Item : in STRING);
- => Ausgabe einer Zeichenkette mit anschliessendem Zeilenende
- * Get(Item : out STRING);
- => Einlesen eienr Zeichenkette
- Wenn Laenge auf 10 definiert ist muessen 10 Zeichen eingegeben werden.
- Werden mehr eingegeben, werden sie durch nachfolgendes Skip_Line geloescht
- * Get_Line(Item: in STRING; Last: out NATURAL)
- => Einlesen eienr Zeichenkette, dass einlesen wird beendet falls,
- das Zeilenende erreicht ist, in diesem fall Skip_Line,
- das Ende der Zeichenkette erreicht ist.
- Letzter_Index : NATURAL := 0;
- Zeichenkette : STRING(1..10) := (others => ' ');
- Ada.Text_IO.Get_Line(Zeichenkette, Letzter_Index);
- if Letzter_Index = Zeichenkette'Last then
- Ada.Text_IO.Skip_Line;
- end if;
- Ada.Text_IO.Put(Zeichenkette(Zeichenkette'First..Letzter_Index));
- * Suchen einer Teilzeichenkette
- Name : STRING(1..15) := ????;
- Such : STRING(1..3) := ????;
- for I in Name'First..Name'Last - Such'Length +1 loop
- if Name(I..I+Such'Length -1) = Such then
- <Aktion>;
- end if;
- end loop;
- --------------------------------------------------------------------------------------------
- Reihungen
- 1. Beschraenkte Reihung S.3
- Deklaration
- 1.1 Komponentendatentyp => INTEGER
- 1.2 Indexbereich => type WOCHENTAGE_T is (Mo, Di, Mi, Don, Fr, Sa, So);
- 1.3 Reihungsdatentyp => type WOCHE_TA is array (WOCHENTAGE_T)of INTEGER;
- 1.4 Variable => Initialisierung
- Reihung2 : WOCHE_TA;
- type VEKTOR_1_TA is array (1..10) of POSITIVE;
- type REIHUNG_TA is array (INTEGER range 1..5) of FLOAT;
- Reihung1 : REIHUNG_TA;
- Reihung2 : REIHUNG_TA(1..5); -- NICHT ERLAUBT!!!
- -- Indexeinschränkung in Variable nicht erlaubt!!!
- 2. Unbeschraenkte Reihung
- type REIHUNG_TA is array (INTEGER range <>) of FLOAT;
- -- Der Index kann ueber gesamten Integerbereich gehen
- -- Groesse muss bei Initialisierung angegeben werden
- Reihung1 : REIHUNG_TA(1..10):= (others => 0.0);
- Reihung2 : REIHUNG_TA := (1, 50, 23, 18, 9);
- -- Der Indexbereich ist 5 gross
- 3. Zugriff auf eindimensionale Reihungen
- Variable(< Bezeichnung Index >):= ???;
- Reihung1(10) := 5.5;
- 4. Attribute S. 7/8
- * Sie beziehen sich immer auf den INDEXTYP
- * Sie werden generell nur auf VARIABLEN angeendet
- * Nicht auf unbeschraenkte Reihungen anwenden
- _TA'First => liefert die untere Grenze des INDEX bereichs
- Reihung1'First = 1
- _TA'Last => liefert die obere Grenze des INDEX bereichs
- Reihung1'Last = 10
- _TA'Length => liefert die Anzahlder INDEXWERTE als wert vom Typ universal_integer
- Reihung1'Length = 10
- _TA'Range => liefert den INDEX-Bereich, enspricht _TA'First .. _TA'Last
- -- Attribut immer auf Variable anwenden, nicht auf Datentyp!
- 5. Aggregate
- * positionelles Aggregat
- type WOCHENTAGE_T is (Mo, Di, MI, Don, Fr, Sa, So);
- type STUNDENUEBERSICHT_TA is array (WOCHENTAGE_T range Mo .. Fr) of NATURAL;
- Arbeitskarte : STUNDENUEBERSICHT_TA := (0, 0, 0, 0, 0);
- Arbeitskarte := (8, 9, 8, 2, 2);
- -- Für jeden INDEX muss ein Wert angegeben werden.
- * Namentliche Aggregate
- Arbeitskarte := (Di => 5, Mo | Mi => 4, Don..Fr => 3);
- * Aggregate mit others
- Arbeitskarte := (Mo => 5, others => 7);
- 6. leere Reihung
- Bei leerer Reihung ist der linke Indexwert immer kleiner als der rechte.
- Reihung1(2..1) := leere Reihung;
- --------------------------------------------------------------------------------------------
- Reihung in Reihung
- type MITARBEITER_T is range 1..20;
- type TAG_T is (Mo, Di, Mi, Don, Fr);
- type UEBERSICHT_PRO_PERSON_TA is array (MITARBEITER_T) of BOOLEAN;
- -- Innere Reihung Indextyp Mitarbeitern und Komponentendatentyp Boolean
- -- Innere Reihung MUSS BESCHRAENKT sein!!!
- type UEBERSICHT_TA is array (TAG_T) of UEBERSICHT_PRO_PERSON_TA;
- -- Aeusserer Reihung mit Indexbereich Tag und Komponenten der inneren Reihung
- Anwesenheit : UEBERSICHT_TA;
- Anwesenheit(Di)(2):= false; -- Die Anwesenheit wurde am Dienstag bei Mitarbeiter 2
- -- auf false gesetzt.
- --------------------------------------------------------------------------------------------
- Mehrdimensionale Reihung
- type UEBERSICHT_TA is array (TAG_T, MITARBEITER_T) of BOOLEAN;
- Zugriff: Name(Index_Zeile, Index_Spalte);
- Anwesenheit : UEBERSICHT_TA;
- Anwesenheit(Di, 2) := false;
- Mehrdimensionale Reihungen koennen in allen Indizes unbeschraenkt oder beschraenkt sein
- Bereiche sind bei mehrdimensionalen Reihungen nicht moeglich.
- * ATTRIBUTE
- Hinter dem Attribut muss immer (1) fuer den Zeilenindex oder (2) fuer Spantlenindex
- angegeben werden.
- A'First(1) = ... => erster Wert des Zeilenindex
- A'Last(2) = ... => Letzter Wert des Spantlenindex
- A'Length(1) = ... => Anzahl der Indexwerte des Zeilenindex als universal_integer
- A'Range(2) = ... => enspricht A'First(2)..A'Last(2) vom Spaltenindex
- * Aggregate
- type ZWEIDIMENSIONAL_TA is array (1..2, 1..3) of INTEGER;
- X: ZWEIDIMENSIONAL_TA;
- X := (others => (others=> 0)); -- 0 0 0
- -- 0 0 0
- X := (others => (1 => 1, 2 => 2, 3 => 3)); -- 1 2 3
- -- 1 2 3
- X := (( 11, 12, 13), (21, 22, 23)); -- 11 12 13
- -- 21 22 23
- X := (1=> (1=> 11, 2=> 12 3=> 13), 2=> (21, 22,23)); -- 11 12 13
- -- 21 22 23
- Beispiel:
- type ZEILE_T is range 1..4;
- type SPALTE_T is (a, b, c, d);
- type KOMPONENTE_T is range 0..10;
- type TEST_A_TA is array (ZEILE_T, SPALTE_T) of KOMPONENTE_T;
- Konstant_Feld : constant TEST_A_TA := (1..2 => (a => 1, others 0),
- 4 => (b|d => 2, others => 10),
- others => (others => 0));
- -- a b c d
- -- 1 1 0 0 0
- -- 2 1 0 0 0
- -- 3 0 0 0 0
- -- 4 10 2 10 2
- --------------------------------------------------------------------------------------------
- Einfache Verbunde
- type DATUM_TR is record
- Tag : INTEGER range 1..31; -- implizite Initialisierung
- Monat : INTEGER range 1..12 := 1; -- explizite Initialisierung
- Jahr : INTEGER range 1900..2100 := 1990;
- end record;
- * Aggregat
- - Alle Komponenten muessen genau einmal genannt werden
- - positionell, namentiliche Zuweisung oder Mischform moeglich
- Aktuelles_Datum : DATUM_TR := (16, 4, 2019);
- Aktuelles_Datum : DATUM_TR := (Tag => 16, Monat => 4, Jahr => 2019);
- * Operationen
- - die Zuweisung :=
- - die Vergleichsoperationen = und /=
- - Komponentenselektion .
- Aktuelles_Datum.Monat := 8;
- -- Beispiel
- type TEXT_TR is record
- Laenge: NATURAL := 0;
- Inhalt: STRING(1..80):= (others => ' ');
- end record;
- T: TEXT_TR;
- T.Inhalt(2..7) := "Klausi"
- --------------------------------------------------------------------------------------------
- Verbunde mit Diskriminante
- --------------------------------------------------------------------------------------------
- Kontrollstrukturen
- if - Anweisungen
- if < Bedingung> then
- <Anweisung>;
- end if;
- if < Bedingung> then -- wird eine Bedingung erfuellt, wird if Anweisung verlassen
- <Anweisung>;
- elsif < Bedingung> then
- <Anweisung> ;
- elsif < Bedingung> then
- <Anweisung>;
- end if;
- if < Bedingung> then
- <Anweisung>;
- else
- <Anweisung>;
- end if;
- if < Bedingung> then
- <Anweisung>;
- else
- null; -- Nullanweisung, es passiert nichts
- end if;
- case - Anweisung
- -- case benoetigt DISKRETEN Datentyp
- -- BOOLEAN, CHARAKTER, INTEEGR, modular
- -- kein FLOAT!!
- case X is case X is
- when 10 => when 50..100 =>
- <Anweisung>; <Anweisung>;
- when 20 => when 20..49 =>
- <Anweisung>; <Anweisung>;
- when others => when others =>
- <Anweisung>; null;
- end case; end case;
- -- Bereiche duerfen sich nicht ueberschneiden
- --------------------------------------------------------------------------------------------
- Schleifen
- 1. Unkonditionierte Schleifen
- loop
- <Anweisung>;
- exit when <Bedingung>
- end loop;
- 2. Konditionierte Schleife
- while <Bedingung> loop --solange Bedingung true ist, wird Schleife ausgefuehrt
- <Anweisung>;
- end loop;
- * Muss keine Zaehlvaribale haben
- * Bei verwendung einer Zaehlvariable muss diese angelegt werden
- * Keine auto. Zaehlvar. => bestimmen der Schrittweite moeglich
- * Bedingung statt Zaehler => komplexe Bedingungen moeglich
- 3. Zaehlschleife
- for I in <Bereich> loop
- <Anweisung>;
- end loop;
- * Zaehlvariable wird automatisch angelegt
- * Im Schleifenkoerper ist der Zaehler nicht veraenderbar
- * Grenzen notwendig
- * Schrittweite = 1
- * Kann mit reverse Rueckwaerts Zaehlen
- --------------------------------------------------------------------------------------------
- Formatierung der Ausgabe
- => Aufzaehlungstypen Enumeration_IO
- ENUMERATION_IO.Put(Item, width => 4, Type_Set => Upper_Case);
- -- width beschreibt linksbuendig Anzahl der Stellen,
- -- Type_Set sagt ob alles gross oder klein geschrieben wird
- => FLOAT_IO
- FLOAT_IO.Put(Item, Fore, Aft, Expo);
- -- Fore sagt wie viele Zahlen vor dem Komma stehen Rechtsbuendig
- -- Aft sagt wie viele Zahlen nach dem Komma,
- -- Expo =0 => Dezimaldarstellung, =1 Exponentialdarstellung
- => INTEGER_IO
- INTEGER_IO.Put(Item, width, Base);
- -- width beschreibt rechtsbuendig Anzahl der Stellen,
- -- Base => Darstellung Zahlensystem
- --------------------------------------------------------------------------------------------
- Oft genutzte Programmteile
- --INTEGER EInlesen und Ausgeben
- package INTEGER_IO is new Ada.Text_IO.INTEGER_IO(INTEGER);
- Ada.Text_IO.Put(" ");
- INTEGER_IO.GET( );
- Ada.Text_IO.Skip_Line;
- Ada.Text_IO.New_Line;
- Ada.Text_IO.Put(" ");
- INTEGER_IO.Put( );
- Ada.Text_IO.New_Line;
- -- FLOAT einlesen
- package FLOAT_IO is new Ada.Text_IO.FLOAT_IO(FLOAT);
- Ada.Text_IO.Put(" ");
- FLOAT_IO.GET( );
- Ada.Text_IO.Skip_Line;
- Ada.Text_IO.New_Line;
- Ada.Text_IO.Put(" ");
- FLOAT_IO.Put( );
- Ada.Text_IO.New_Line;
- -- ENUMERATION einlesen und ausgeben
- package <Name des Datentyp>_IO is new Ada.Text_IO.Enumeration_IO(<Name des Datentyp>);
- Ada.Text_IO.Put(" ");
- <Name des Datentyp>_IO.GET( );
- Ada.Text_IO.Skip_Line;
- Ada.Text_IO.New_Line;
- Ada.Text_IO.Put(" ");
- <Name des Datentyp>_IO.Put( );
- Ada.Text_IO.New_Line;
- *********************************AUFGABE SWPA
- -- Kontextklausel
- with Ada.Text_IO;
- procedure Main is
- -- Deklarationsteil
- -- Konstanten
- -- POSITION FÜR DIE AUSGABE
- Pos_Anzahl : constant Ada.Text_IO.Count :=5;
- Pos_Bezeichnung : constant Ada.Text_IO.Count :=13;
- Pos_Einzelpreis : constant Ada.Text_IO.Count :=28;
- Pos_Ges_Preis : constant Ada.Text_IO.Count :=43;
- Breite_Preis : constant INTEGER :=5;
- Mwst : constant FLOAT :=19.0;
- -- Typen
- type ANREDE_T is (Herrn ,Frau);
- type ARTIKEL_T is (Hose,Hemd, Schue);
- subtype STRING_46_TA is STRING(1 .. 46);
- type ABFRAGE_ARTIKEL_TA is array (ARTIKEL_T) of STRING_46_TA;
- type ANZAHL_ARTIKEL_TA is array (ARTIKEL_T) of INTEGER;
- type PREIS_TA is array (ARTIKEL_T) of FLOAT;
- -- Pakete
- package AN_IO is new Ada.Text_IO.Enumeration_IO(ANREDE_T);
- package AR_IO is new Ada.Text_IO.Enumeration_IO(ARTIKEL_T);
- package FLOAT_IO is new Ada.Text_IO.Float_IO(FLOAT);
- package INTEGER_IO is new Ada.Text_IO.Integer_IO(INTEGER);
- -- Variablen
- F_Gesamtpreis : FLOAT := 0.0;
- F_Porto : FLOAT := 0.0;
- F_Rabatt : FLOAT := 0.0;
- F_Endbetrag : FLOAT := 0.0;
- F_Einzelpreis : FLOAT := 0.0;
- I_Nr : INTEGER :=1;
- Anzahl_Artikel : ANZAHL_ARTIKEL_TA :=(others => 0 ); -- Array
- Einzel_Preise : PREIS_TA :=(
- Hose => 35.00,
- Hemd => 49.95,
- Schue => 29.95
- );
- Anrede : ANREDE_T :=Herrn;
- Abfrage_Artikel : ABFRAGE_ARTIKEL_TA :=(
- Hose => "Wie viele Hosen moechten Sie kaufen ? : ",
- Hemd => "Wie viele Hemden moechten Sie kaufen ? : ",
- Schue => "Wie viele Paar Schue moechten Sie kaufen ? : "
- );
- begin
- --Anweisungsteil
- -- EVA-Prinzip
- -- Eingabeteil
- --------------------------------------------------------------------------------
- Ada.Text_IO.Put("Preisuebersicht");
- Ada.Text_IO.New_Line(2);
- for Artikel in Einzel_Preise'Range loop
- AR_IO.Put(Artikel,Width => 10);
- Ada.Text_IO.Put("=> ");
- FLOAT_IO.Put(Einzel_Preise(Artikel),Fore => 2,Aft => 2,Exp => 0);
- Ada.Text_IO.Put_Line( " Euro");
- end loop;
- Ada.Text_IO.New_Line(5);
- for i in Abfrage_Artikel'Range loop
- Ada.Text_IO.Put(Abfrage_Artikel(i));
- --Ada.Text_IO.Set_Col(60);
- INTEGER_IO.Get(Anzahl_Artikel(i));
- Ada.Text_IO.Skip_Line;
- end loop;
- --
- -- Ada.Text_IO.Put(Abfrage_Artikel(Hose));
- -- Ada.Text_IO.Set_Col(80);--Cursor position an stelle 45 damit er immer an gleiche stelelle erschein
- -- INTEGER_IO.Get(I_Anzahl_Hose);
- -- Ada.Text_IO.Skip_Line;
- --
- -- Ada.Text_IO.Put(Abfrage_Artikel(Hemd));
- -- Ada.Text_IO.Set_Col(80);
- -- INTEGER_IO.Get(I_Anzahl_Hemd);
- -- Ada.Text_IO.Skip_Line;
- --
- -- Ada.Text_IO.Put(Abfrage_Artikel(Schue));
- -- Ada.Text_IO.Set_Col(80);
- -- INTEGER_IO.Get(I_Anzahl_Schue);
- -- Ada.Text_IO.Skip_Line;
- --------------------------------------------------------------------------------
- -- Verarbeitungsteil
- for Artikel in Anzahl_Artikel'Range loop --
- F_Gesamtpreis := F_Gesamtpreis + (FLOAT(Anzahl_Artikel(Artikel)) * Einzel_Preise(Artikel));
- end loop;
- --F_Rabatt BERECHNEN
- if F_Gesamtpreis >= 500.0 then
- F_Rabatt := F_Gesamtpreis * 0.03;
- elsif F_Gesamtpreis >= 200.0 then
- F_Rabatt := F_Gesamtpreis * 0.02;
- else
- F_Rabatt := 0.0;
- end if;
- --F_Porto PORTO BERECHENE
- if F_Gesamtpreis - F_Rabatt >=100.0 then
- F_Porto := 5.00;
- end if;
- -- F_Endbetrag
- F_Endbetrag := F_Gesamtpreis - F_Rabatt + F_Porto ;
- -- Ausgabeteil
- -- Zeilenlaenge auf 55 Zeichen festgelegt
- -- Ausgabe der Kopfzeile1 (rechtsbuendig Ort,Datum)
- Ada.Text_IO.Put_Line(" Feldafing,10.05.2012");
- -- Ausgabe einer Leerzeile
- Ada.Text_IO.New_Line;
- -- Anschriftenfeld
- -- Anrede
- --Ada.Text_IO.Put_Line("Herrn");
- AN_IO.Put(Anrede);
- Ada.Text_IO.New_Line;
- -- Vorname, Name
- Ada.Text_IO.Put_Line("Max Mustermann");
- -- Strasse, Hausnr
- Ada.Text_IO.Put_Line("Schlossberg 10");
- -- PLZ Ort
- Ada.Text_IO.Put_Line("82340 Feldafing");
- -- zwei Leerzeilen
- Ada.Text_IO.New_Line(2);
- -- Ueberschrift_1 zentrieren
- Ada.Text_IO.Put_Line(" Rechnung");
- -- Ueberschrift_2
- Ada.Text_IO.Put_Line(" ========");
- -- zwei Leerzeilen
- Ada.Text_IO.New_Line(2);
- -- Spaltenueberschrift_1
- Ada.Text_IO.Put_Line("Nr Anzahl Bezeichnung Einzelpreis Ges-Preis");
- -- Spaltenueberschrift_2
- Ada.Text_IO.Put_Line("-------------------------------------------------------");
- -- Artikel Datensaetze
- for Artikel in Anzahl_Artikel'Range loop
- --NR AUSGEBEN
- INTEGER_IO.Put(ARTIKEL_T'Pos(Artikel)+1, Width => 0);
- --ANZAHL AUSGEBEN
- Ada.Text_IO.Set_Col(Pos_Anzahl);
- INTEGER_IO.Put(Anzahl_Artikel(Artikel), Width => 0);
- --ARTIKEL AUSGEBEN
- Ada.Text_IO.Set_Col(Pos_Bezeichnung);
- AR_IO.Put(Artikel,10);
- --EINZELPREIS AUSGABE
- Ada.Text_IO.Set_Col(Pos_Einzelpreis);
- FLOAT_IO.Put(Einzel_Preise(Artikel), Fore => Breite_Preis, Aft => 2, Exp => 0); -- BREITE_ Preis = 5
- --GES PREIS AUSGABE
- Ada.Text_IO.Set_Col(Pos_Ges_Preis);
- FLOAT_IO.Put(FLOAT(Anzahl_Artikel(Artikel)) * Einzel_Preise(Artikel), Fore => Breite_Preis, Aft => 2, Exp => 0);
- Ada.Text_IO.Put_Line(" Euro");
- --FLOAT_IO.Put(Fore => 10)-- wiviele Stellen vor dem Komma ? in diesem fal ( 10000, )
- end loop;
- -- Rechnungsunterstrich
- Ada.Text_IO.Put_Line("-------------------------------------------------------");
- -- Gesamtbetrag
- Ada.Text_IO.Put("Gesamtbetrag:");
- Ada.Text_IO.Set_Col(Pos_Ges_Preis);
- FLOAT_IO.Put(F_Gesamtpreis,Fore => Breite_Preis, Aft => 2, Exp => 0);
- Ada.Text_IO.Put_Line(" Euro");
- -- enthaltene Mehrwertsteuer 19%
- --Ada.Text_IO.Put_Line("enthaltene Mwst. (19.0%): 23.93 Euro ");
- Ada.Text_IO.Put("enthaltene Mwst. (");
- FLOAT_IO.Put(Mwst,Fore => 0,Aft => 1,Exp => 0);
- Ada.Text_IO.Put("%): ");
- FLOAT_IO.Put(F_Gesamtpreis / 100.0 * Mwst,Fore =>0,Aft => 2,Exp => 0 );
- Ada.Text_IO.Put_Line(" Euro");
- -- Porto und Verpackung
- --Ada.Text_IO.Put_Line("Porto (ab 100 Euro frei, 5.00 Euro ): 0.00 Euro");
- Ada.Text_IO.Put("Porto (ab 100 Euro frei, 5.00 Euro ):");
- Ada.Text_IO.Set_Col(Pos_Ges_Preis);
- FLOAT_IO.Put( F_Porto,Fore => Breite_Preis, Aft => 2, Exp => 0);
- Ada.Text_IO.Put_Line(" Euro");
- -- Rabatt
- -- Ada.Text_IO.Put_Line("Rabatt (ab 200 Euro 2.0%, ab 500 Euro 3.0%): 0.00 Euro");
- Ada.Text_IO.Put("Rabatt (ab 200 Euro 2.0%, ab 500 Euro 3.0%):");
- FLOAT_IO.Put( F_Rabatt,Fore => 3, Aft => 2, Exp => 0);
- Ada.Text_IO.Put_Line(" Euro");
- -- Rechnungsunterstrich
- Ada.Text_IO.Put_Line("-------------------------------------------------------");
- -- Endbetrag
- --Ada.Text_IO.Put_Line("Endbetrag: 149.90 Euro");
- Ada.Text_IO.Put("Endbetrag:");
- Ada.Text_IO.Set_Col(Pos_Ges_Preis);
- FLOAT_IO.Put( F_Endbetrag,Fore => Breite_Preis, Aft => 2, Exp => 0);
- Ada.Text_IO.Put_Line(" Euro");
- end Main;
- ***********************************************REfactoring2 UP Beispiele von Blocken Unterprogramen und funktionen
- with Ada.Text_IO;
- -- Modul-Name : Refactoring2Up (Hauptprogramm)
- ------------------------------------------------------------
- -- Refactoring (Design vorhandener Sw verbessern)
- -- Unterprogramme (UP) extrahieren
- -- 1. ohne lokale Variable -- ohne parameter
- -- 2. mit lokale Variable nur lesender Zugriff
- -- 3. mit Zuweisung einer lokalen Variablen FUNKTION
- -- 4. mit lokale Variablen schreibender Zugriff
- --------------------------------------------------------------------------
- -- Beschreibung:
- -- Dieses Programm liest Messwerte in ein Array ein,
- -- ermittelt den Mittelwert und gibt diesen aus.
- procedure Main is
- -- Typen
- type MESSWERTE_T is range 0 .. 1000;
- subtype INDEX_T is POSITIVE;
- type MESSREIHE_TA is array(INDEX_T range <>) of MESSWERTE_T;
- -- Pakete auspraegen
- package MESSWERT_IO is new Ada.Text_IO.Integer_IO(MESSWERTE_T);
- -- Variablen erzeugen
- Anzahl_Messwerte : INDEX_T := 5;
- Messreihe : MESSREIHE_TA(1..Anzahl_Messwerte) := (others => 0);
- Summe,
- Mittelwert : MESSWERTE_T := 0;
- -- Proceduren
- procedure Ueberschrift ; -- Aufgabe 1)
- procedure Mittelwertausgabe (X : in MESSWERTE_T); --Aufgabe 2)
- procedure EingabeMeswerte (A : out MESSREIHE_TA) ; --Aufgabe 4)
- function Berechnungmitelwertes ( X : in MESSREIHE_TA) return MESSWERTE_T; -- Aufgabe 3
- -- Implementirung
- procedure Ueberschrift is
- --------------------------------------------------------------------------------
- --Aufgabe 1)
- --keine variablen anlegen wird nicht
- begin
- Ada.Text_IO.Put_Line("***************************");
- Ada.Text_IO.Put_Line("* Messwerte ermitteln *");
- Ada.Text_IO.Put_Line("***************************");
- end Ueberschrift ;
- --------------------------------------------------------------------------------
- --Aufgabe 2)
- procedure Mittelwertausgabe (X : in MESSWERTE_T) is
- begin
- -- Ausgabe des Mittelwertes
- Ada.Text_IO.Put("Der Mittelwert der Messreihe ist: "); -- in out
- MESSWERT_IO.Put(Mittelwert);
- end Mittelwertausgabe;
- --------------------------------------------------------------------------------
- --Aufgabe 4)
- procedure EingabeMeswerte (A : out MESSREIHE_TA) is
- begin
- for Index in A'Range loop
- Ada.Text_IO.Put("Geben Sie den" & INTEGER'Image(Index) & ".Messwert ein: ");
- MESSWERT_IO.Get(A(Index));
- Ada.Text_IO.Skip_Line;
- end loop;
- end EingabeMeswerte;
- --------------------------------------------------------------------------------
- --Aufgabe 3 eine Funktion
- function Berechnungmitelwertes ( X : in MESSREIHE_TA) return MESSWERTE_T is
- Mittelwert, Summe : MESSWERTE_T := 0;
- begin
- for Index in Messreihe'Range loop
- Summe:= Summe + X(Index);
- end loop;
- Mittelwert := Summe / MESSWERTE_T(Anzahl_Messwerte); -- Funktion
- return Mittelwert;
- end Berechnungmitelwertes;
- --------------------------------------------------------------------------------
- begin
- -- Erste prozedur Aufrufen
- -- Ausgabe der Ueberschrift
- Ueberschrift; -- Aufgabe 1)
- -- Eingabe der Messwerte
- EingabeMeswerte(Messreihe); -- Aufagbe 4)
- -- Berechnen des Mittelwertes -- Aufgae 3)
- Mittelwert := Berechnungmitelwertes(Messreihe);
- -- Funktion übernimt den mittelwert und gibt in aus auf Monitor
- Mittelwertausgabe (Mittelwert); -- Aufgabe 2)
- end Main;
- --------------------------------ORIGINAL
- -- procedure Refactoring2Up is
- -- -- Typen
- -- type MESSWERTE_T is range 0 .. 1000;
- -- subtype INDEX_T is POSITIVE;
- -- type MESSREIHE_TA is array(INDEX_T range <>) of MESSWERTE_T;
- --
- -- -- Pakete auspraegen
- -- package MESSWERT_IO is new Ada.Text_IO.Integer_IO(MESSWERTE_T);
- --
- -- -- Variablen erzeugen
- -- Anzahl_Messwerte : INDEX_T := 5;
- --
- -- Messreihe : MESSREIHE_TA(1..Anzahl_Messwerte) := (others => 0);
- -- Summe,
- -- Mittelwert : MESSWERTE_T := 0;
- --
- -- begin
- --
- -- -- Ausgabe der Ueberschrift
- -- Ada.Text_IO.Put_Line("***************************");
- -- Ada.Text_IO.Put_Line("* Messwerte ermitteln *");
- -- Ada.Text_IO.Put_Line("***************************");
- -- -- Eingabe der Messwerte
- -- for Index in Messreihe'Range loop
- -- Ada.Text_IO.Put("Geben Sie den" & INTEGER'Image(Index) & ".Messwert ein: ");
- -- MESSWERT_IO.Get(Messreihe(Index));
- -- Ada.Text_IO.Skip_Line;
- -- end loop;
- -- -- Berechnen des Mittelwertes
- -- for Index in Messreihe'Range loop
- -- Summe:= Summe + Messreihe(Index);
- -- end loop;
- --
- -- Mittelwert := Summe / MESSWERTE_T(Anzahl_Messwerte);
- -- -- Ausgabe des Mittelwertes
- -- Ada.Text_IO.Put("Der Mittelwert der Messreihe ist: ");
- -- MESSWERT_IO.Put(Mittelwert);
- --
- -- end Refactoring2Up;
- *******************************************Blocke
- with Ada.Text_IO;
- procedure Main is
- package F_IO is new Ada.Text_IO.Float_IO(Float);
- -- RadiusKreis,UmfanKreis,FlaecheKreis : Float:=0.0;
- -- BreiteRechteck,LaengeRechteck,UmfangRechteck,FlaecheRechteck : FLOAT :=0.0;
- FlaecheKreis,FlaecheRechteck : FLOAT :=0.0;
- begin
- Kreis :
- declare
- Radius,Umfan,Flaeche : Float:=0.0;
- --Kreis
- ----einlesen
- begin
- Ada.Text_IO.Put(" BItte Radius eingeben ");
- F_IO.get(Radius);
- Ada.Text_IO.Skip_Line;
- --Berechnung
- Umfan := 2.0*Radius*Ada.Numerics.Pi;
- Flaeche := Radius**2*Ada.Numerics.Pi;
- FlaecheKreis := Flaeche;-- Nutzung Globale WAriablen
- --Ausgabe
- Ada.Text_IO.Put("Umfang des Kreisees ");
- F_IO.Put(Umfan, 1,2,0);
- Ada.Text_IO.New_Line;
- Ada.Text_IO.Put("Fläche des Kreises ");
- F_IO.Put(Flaeche,1,2,0);
- end Kreis;
- --Rechteck
- Rechteck :
- declare
- Breite,Laenge,Umfang,Flaeche : FLOAT :=0.0;
- begin
- --Einlesen
- Ada.Text_IO.Put("Breite des Rechtecks :");
- F_IO.Get(Breite);
- Ada.Text_IO.Skip_Line;
- ada.Text_IO.Put("Laenge des Rechtecks");
- F_IO.Get(Laenge);
- F_IO.Get(Laenge);
- Ada.Text_IO.Skip_Line;
- --Berechnung
- Umfang := 2.0*Laenge + BreiteRechteck*2;
- Flaeche := Laenge*Breite;
- FlaecheRechteck := Flaeche; -- Nutzung Globale WAriablen
- Main.FlaecheRechteck := Flaeche;-- so siet besser aus
- ----Ausgabe
- Ada.Text_IO.Put("Umfang des Rechecks:");
- F_IO.Put(Umfang ,1,2,0);
- Ada.Text_IO.New_Line;
- Ada.Text_IO.Put("Flaeche des Rechtecks : ");
- F_IO.Put(Flaeche,1,2,0);
- end Rechteck;
- if FlaecheKreis=FlaecheRechteck then
- null;
- end if;
- end Main;
- ****************************AUFGABE 25 KApitel 2
- with Ada.Text_IO;
- procedure Main is
- Enthalten : BOOLEAN := false;
- type INDEX_T is range 0 .. 1000;--Index
- type EINTRAG_T is range 1..5000 ; -- Komponente
- type EINTRAGSREIHUNG_TA is array (INDEX_T range <>) of EINTRAG_T;
- type MENGE_TR (Anzahl_Elemente : INDEX_T := 0) is record
- Elemente : EINTRAGSREIHUNG_TA (1..Anzahl_Elemente):=(others =>1);---
- end record;
- E : EINTRAG_T := 3;
- M, M1, M2 : MENGE_TR ; --Anzahl_Elemente =0;
- --Elemente = Leeres Array
- begin
- -- A)
- M := (M.Anzahl_Elemente + 1, M.Elemente & E);
- -- B)
- -- M := (M.Anzahl_Elemente - 1, M.Elemente(1..(M.Anzahl_Elemente - 1))); -- wird immer der letzte wert gelöscht (also nicht unbedingt E, sondern den letzten)
- -- es wird E aus M.Elmente gelöscht
- for I in M.Elemente'Range loop
- if (E = M.Elemente(I)) then
- M := (M.Anzahl_Elemente -1, M.Elemente(M.Elemente'First .. I-1)&M.Elemente(I+1 .. M.Elemente'Last));
- end if;
- end loop;
- -- C)
- -- wir nehmen an m1 und m2 haben werte
- M := (M1.Anzahl_Elemente + M2.Anzahl_Elemente,M1.Elemente & M2.Elemente); --& weil es errays sind die verbindet werden
- end Main;
- ******************************** AUFGABE 23 KApitel 2
- with Ada.Text_IO;
- procedure Main is
- type ZUSTAND_T is (AN, AUS);
- type GERAETENUMMER_T is new NATURAL ;
- type GERAETE_T is (IN_PUT, OUT_PUT, IN_OUT_PUT);
- type ZUGRIF_BERECHTIGUNG_T is new BOOLEAN ;
- type KANALWERK_T is new NATURAL;
- type TSN_T is new NATURAL;
- type WARTESCHLANGE_TA is array (NATURAL range <>)of TSN_T;
- --Warteschlange : NATURAL :=1;
- type GERAET_TR (Typ :GERAETE_T ; Warteschlangenlaenge : NATURAL ) is record
- Zustand : ZUSTAND_T;
- Geraetenummer : GERAETENUMMER_T ;
- Warteschlange : WARTESCHLANGE_TA(1 .. Warteschlangenlaenge) ;
- case Typ is
- when IN_PUT =>
- Berechtigung1 : BOOLEAN ;
- when OUT_PUT =>
- Kanalwerk1 : KANALWERK_T;
- when IN_OUT_PUT =>
- Berechtigung2 : BOOLEAN ;
- Kanalwerk2 : KANALWERK_T;
- end case;
- end record;
- G: GERAET_TR (Typ => IN_PUT, Warteschlangenlaenge =>10 );
- begin
- null;
- end Main;
- *************************************Aufgabe 1 KApitel 3
- with Ada.Text_IO;
- procedure Main is
- type FAMILIEN_STAND_T is (Ledig, Verheiratet, Geschieden);
- subtype STRING_10_TA is STRING(1..10);
- type DATUM_TR is record
- Tag : INTEGER range 1..31:=1;
- Monat : INTEGER range 1..12:=1;
- Jahr : INTEGER range 1900 .. 2100 :=1900;
- end record;
- type PERSON_TR ( Status : FAMILIEN_STAND_T := Ledig ) is record
- Vorname : STRING_10_TA := (others =>' ');
- Nachname : STRING_10_TA := (others =>' ');
- case Status is
- when Ledig =>
- null;
- when Verheiratet =>
- Hochzeitstag : DATUM_TR;
- when Geschieden =>
- Scheidungstag : DATUM_TR;
- end case ;
- end record;
- --a ) Reihungstyp zu Aufnahme von ledigen Personen
- type PERSONEN_LEDIG_TA is array (POSITIVE range <>)of PERSON_TR(Ledig);
- --b) Reihungstyp zu Aufnahme von belibigen Personen
- type PERSONEN_TA is array (POSITIVE range <>) of PERSON_TR;
- --Pakete auspraegen
- package FAM_STANd_IO is new Ada.Text_IO.Enumeration_IO(FAMILIEN_STAND_T);
- package INT_IO is new Ada.Text_IO.Integer_IO(INTEGER);
- package POS_IO is new Ada.Text_IO.Integer_IO(POSITIVE);
- --Objekte auspraegen
- --Variable
- Eingabe : FAMILIEN_STAND_T;
- Anzhal_Person : POSITIVE :=2;
- Personen : PERSONEN_LEDIG_TA (1..Anzhal_Person);
- begin
- Ada.Text_IO.Put_Line("Geben Sie die Anzahl der Personen ein: ");
- INTEGER_IO.Get(Anzahl_Personen);
- Ada.Text_IO.Skip_Line;
- -- Kreis :
- -- declare
- -- Radius,Umfan,Flaeche : Float:=0.0;
- -- --Kreis
- -- ----einlesen
- -- begin
- -- Ada.Text_IO.Put(" BItte Radius eingeben ");
- -- F_IO.get(Radius);
- -- Ada.Text_IO.Skip_Line;
- --
- -- --Berechnung
- --
- -- Umfan := 2.0*Radius*Ada.Numerics.Pi;
- -- Flaeche := Radius**2*Ada.Numerics.Pi;
- -- FlaecheKreis := Flaeche;-- Nutzung Globale WAriablen
- -- --Ausgabe
- --
- -- Ada.Text_IO.Put("Umfang des Kreisees ");
- -- F_IO.Put(Umfan, 1,2,0);
- -- Ada.Text_IO.New_Line;
- -- Ada.Text_IO.Put("Fläche des Kreises ");
- -- F_IO.Put(Flaeche,1,2,0);
- --
- -- end Kreis;
- --
- -- --Rechteck
- -- Rechteck :
- -- declare
- -- Breite,Laenge,Umfang,Flaeche : FLOAT :=0.0;
- -- begin
- -- --Einlesen
- -- Ada.Text_IO.Put("Breite des Rechtecks :");
- -- F_IO.Get(Breite);
- -- Ada.Text_IO.Skip_Line;
- -- ada.Text_IO.Put("Laenge des Rechtecks");
- -- F_IO.Get(Laenge);
- -- F_IO.Get(Laenge);
- -- Ada.Text_IO.Skip_Line;
- -- --Berechnung
- -- Umfang := 2.0*Laenge + BreiteRechteck*2;
- -- Flaeche := Laenge*Breite;
- -- FlaecheRechteck := Flaeche; -- Nutzung Globale WAriablen
- -- Main.FlaecheRechteck := Flaeche;-- so siet besser aus
- -- ----Ausgabe
- -- Ada.Text_IO.Put("Umfang des Rechecks:");
- -- F_IO.Put(Umfang ,1,2,0);
- -- Ada.Text_IO.New_Line;
- -- Ada.Text_IO.Put("Flaeche des Rechtecks : ");
- -- F_IO.Put(Flaeche,1,2,0);
- --
- -- end Rechteck;
- --
- -- if FlaecheKreis=FlaecheRechteck then
- -- null;
- -- end if;
- null;
- end Main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement