Ada Aufgaben
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (keine anderen Diffs, Normalansicht)

Verändert: 109c109

:Vorschlag für die Datenstrukturen.

Hinzugefügt: 144a145
:Vorschlag für die Datenstrukturen.

Inhalt
Aufgabe 1   
Aufgabe 1 Ada Spezification   
Aufgabe 1 Ada Body   
Links   
Aufgabe 2   
Aufgabe 2 Ada Spezification   
Aufgabe 3   
Aufgabe 3 Ada Specification   
Sonstiges   

Aufgabe 1    

Wir sollen zu den Zahlen das ausgeschriebene Wort von einem Programm berechnen lassen. Z.B.: 42 --> zweiundvierzig, 425 --> vierhundertfünfundzwanzig, 1300 --> eintausenddreihundert, 24201 --> vierundzwanzigtausendzweihunderteins, 1001000 --> einhunderteintausend, 400016 --> vierhunderttausendsechzehn.

Zu schreiben ist ein Ada95 Programm, das eine natürliche Zahl zwischen 1 und 999999 einliest und korrekt in Worten ausgibt. Erläutern Sie zunächst das Konstruktionsprinzip (fügen Sie dies als Kommentarzeilen in Ihrem Programm ein).

Aufgabe 1 Ada Spezification    

with Ada.Strings.Unbounded;
use  Ada.Strings.Unbounded;
package Number_to_Text is

    subtype Convertable_Values_Type is Integer range 1..999999;
    function Convertion ( Number_Value : Convertable_Values_Type ) return Unbounded_String;

end Number_to_Text

Aufgabe 1 Ada Body    

package body Number_to_Text is

    Eins : constant Unbounded_String := To_Unbounded_String ( "Eins");
    Zwei : constant Unbounded_String := To_Unbounded_String ( "Zwei");
    -- etc.

    -- Ausnahmen
    Zehn  : constant Unbounded_String := To_Unbounded_String ( "Zehn");
    Elf   : constant Unbounded_String := To_Unbounded_String ( "Elf");
    Zwölf : constant Unbounded_String := To_Unbounded_String ( "Zwölf");
    --etc.

    -- Sonstiges
    Hundert : constant Unbounded_String := To_Unbounded_String ( "Hundert");
    -- etc.

    function Convertion ( Number_Value : Convertable_Values_Type ) return Unbounded_String is

       Number_String : Unbounded_String := Null_Unbounded_String;
       Number_Text   : Unbounded_String := Null_Unbounded_String;
 
    begin
      Number_Text := To_Unbounden_String ( Number_Value );

      delare
         Number_Text_Constant_Length : string ( 1..Length (number_Text) ) := To_String ( Number_Text );
         -- Jetzt liegen die einzelnen Zahlen in einem array von charactern vor
         -- den entsprechenden Algorithmus um das Puzzel zusammen zu setzen bitte selber entwickeln.
         -- z.b Number_Text := Drei & Zehn; wenn man die Zahl 13 ausgeben will
      begin
        return Number_Text;
      end
    end;

end Number_to_Text

Hallo Petja dies mal so als Skizze wie man diese Problem angehen kann. Gruß HermannWacker
Bitte den Code noch mit einem Compiler überprüfen. Bisher habe ich das noch nicht gemacht. Hermann
Links    

http://www.adahome.com/rm95/rm9x-A-04-05.html

Aufgabe 2    

Die Musiksammlung umfasst 4 Typen: LP, Doppel-LP, CD und Doppel CD. Zu jedem Album wollen Sie den Interpreten, den Titel und die Gesamtlaufzeit speichern, sowie die auf dem Album befindlichen Stücke mit Namen und Länge.

?? Bei LPs soll dabei noch zwischen CD1 und CD2 unterschieden werden. ??

Entwerfen Sie einen geeigneten Datentyp, um eine Menge von Alben mit den obigen Daten abspeichern zu können. Zu Beginn ist die Datenbank leer, der Benutzer soll nun seine Alben eingeben können, sich die bishere eingegebenen Alben ausgeben lassen und danach auch wieder weitere Alben eingeben können. Die Daten sind bis jetzt unsortiert, der Benutzer soll nun wählen können, ob er die Alben nach Interpret (bei gleichem Interpret dann nach Titel) oder nach Titel (bei gleichem Titel nach Interpret) sortiert ausgeben lassen will.

Um nicht bei jedem Neustart die Daten neu eingeben zu müssen, sollen Sie die Daten in eine Datei speichern und von dort wieder auslesen können (geben Sie in diesem Fall auch eine Beispieldatei ab).

Geben Sie ein Ada95 Programm ab und schreiben Sie am Anfang als Kommentar dazu, welche Teile (Datentyp, Bildschirm-Ein-Ausgabe, Sortierung, Datei- Ein-Ausgabe) Sie bearbeitet haben.

Aufgabe 2 Ada Spezification    

with Ada.Strings.Unbounded,
     Ada.Calendar;
use  Ada.Strings.Unbounded,
     Ada.Calendar;
package Album_Database is

   type Kind_of_Album_Type is ( LP, Double_LP, CD, Double_CD );

   type Song_Type is
   record
      Name   : Unbounded_String;
      Length : Duration;
   end record

   subtype Number_Type is Positive range 1..100;
   type Songs_Type is array ( Number_Type range <>) of Song_Type;

   type Album_Type ( Number_of_Songs Positive:= 10; ) is
   record
      Titel           : Unbounded_String;
      Artist          : Unbounded_String;
      Total_Play_Time : Duration;
      Kind_of_Album   : Kind_of_Album_Type;
      Songs           : Songs_Type (1..Number_of_Songs);
   end record;

end Album_Database;

Vorschlag für die Datenstrukturen.
Aufgabe 3    

Beim Aufräumen haben Sie im Keller ein Puzzle gefunden. Die 9 Teile sollen so zu einem Quadrat zusammengefügt werden, dass an jeder Kante ein durchgehender Pfeil und ggf. eine komplette geometrische Figur entsteht. Nach etwas Probieren haben Sie immerhin 8 Teile passend zusammengefügt, nur das Teil mit der Nummer 7 passt nicht in die verbleibende Ecke.

Schreiben Sie ein Ada95 Programm, dass alle möglichen Lösungen des Puzzles ausgibt (geben Sie die 3 Reihen jeweils an, welche Teile dort verwendet und ob diese um 90, 180 oder 270 Grad gedreht wurden).

Erweitern Sie Ihr Programm, so dass Lösungen, die durch Drehung aus schon gefundenen Lösungen hervorgehen, nicht ausgegeben werden.

http://www.fmi.uni-stuttgart.de/fk/lehre/ws03-04/info1/default.htm

Blatt 11 Aufgabe 4 Verflixte Puzzelei;

Aufgabe 3 Ada Specification    

package Puzzle is

   type Orientation_Type     is ( North, East, South, West ); -- 0, 90, 180, 270
   type Match_Neighbour_Type is ( Yes, No, Not_Applicable );

   type Element_Type is
   record
      Orientation           : Orientation_Type;
      Arrow_Direction       : Oreintation_Type;
      Match_Left_Neighbour  : Match_Neighbour_Type;
      Match_Right_Neighbour : Match_Neighbour_Type;
      Match_Upper_Neighbour : Match_Neighbour_Type;
      Match_Lower_Neighbour : Match_Neighbour_Type; 
   end record;

   type Board_Type is array ( 1..3, 1..3 ) of Element_Type;
 
end Puzzle;

Vorschlag für die Datenstrukturen.
Sonstiges    
Ok, hier ein erster Tipp zu Aufgape 1. Diese eignet sich ganz hervorragend für TestgetriebeneEntwicklung. Schreibe zuerst einen Test, in dem der zu implementierende Algorithmus für die in der Aufgabe genannten Werte aufgerufen und mit dem Soll-Ergebnis verglichen wird. Implementiere dann die Methode so, dass der Test durchläuft. Füge bei Bedarf - vorzugsweise während du dir über das Konstruktionsprinzip von Zahlen Gedanken machst - selbst ausgedachte Tests hinzu. Mein Punkt ist: Indem du dir Testfälle überlegst, kommst du höchstwahrscheinlich schnell auf das zu implementierende Konstruktionsprinzip. Ein alternativer Ansatz ist, einfach bei 1 anzufangen und die Übersetzung jeden Zahl einzeln zu programmieren. Irgendwann (... einunddreißig ... zweiunddreißig ... dreiunddreißig....) wirst du feststellen dass sich wiederkehrende Dinge über eine Abstraktion vereinfachen lassen. -- SDö


StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 23. Januar 2004 17:20 (diff))
Suchbegriff: gesucht wird
im Titel
im Text