Ada Aufgaben
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
-
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
- 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))