• Keine Ergebnisse gefunden

Auffrischungen zu Allgemeine Informatik 29. April 2005

N/A
N/A
Protected

Academic year: 2021

Aktie "Auffrischungen zu Allgemeine Informatik 29. April 2005"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Auffrischungen zu Allgemeine Informatik 29. April 2005

Andreas F. Borchert

borchert@mathematik.uni-ulm.de 28. April 2005

Aufgabe 4

Ein Anagramm ist ein Wort oder eine Phrase, die genau aus den Buchsta- ben eines anderen Worts oder Phrase zusammengesetzt ist. Hier sind einige Beispiele:

• “EU-Osterweiterung” und “Euro tut wegreisen”

• “Geisterfahrer” und “irres Gefaehrt”

• “Clint Eastwood” und “Old West Action”

(Quellen:http://www.anagramme.de/undhttp://www.wordsmith.org/anagram/).

Ziel dieser Aufgabe ist die Entwicklung eines Programms, das Ihnen dem Finden neuer Anagramme behilflich ist. Es ist aber hilfreich, in einzelnen Etappen vorzugehen:

Schritt 1

Bei einem Anagramm werden Klein- und Großbuchstaben nicht unterschie- den. Ferner sind Leerzeichen und andere Nicht-Buchstaben nicht zu ber¨uck- sichtigen. Entsprechend ist es sinnvoll, eine Prozedur Normalize zu haben, die eine Zeichenkette dahingehend bearbeitet, indem sie

(2)

• S¨amtliche Kleinbuchstaben in Großbuchstaben verwandelt (hier hilft die Standardfunktion CAP) und

• alle Nicht-Buchstaben entfernt.

Dazu sollten Sie sofort ein kleine Testprozedur schreiben, die mitRead.Line Zeilen aus der Eingabe liest, sie an Normalize ubergibt und das Resultat¨ anschließend ausgibt. Beispiel:

dublin$ Anagrams

Dies ist ein Test von Normalize!

DIESISTEINTESTVONNORMALIZE Hurra, es klappt :-)

HURRAESKLAPPT dublin$

Schritt 2

Wenn wir zwei Kandidaten miteinander vergleichen wollen, ob sie zusammen ein Anagramm ergeben, m¨ussen wir untersuchen, wie h¨aufig welcher Buch- stabe in jedem Kandidaten vorkommen. Entsprechend wird als n¨achstes eine Prozedur GetLetterFrequencies ben¨otigt, die die Buchstaben einer Zei- chenkette z¨ahlt und als H¨aufigkeits-Array zur¨uckgibt. Dabei darf die Pro- zedur (dank Normalize) davon ausgehen, daß nur Großbuchstaben in der Zeichenkette enthalten sind.

Wenn Sie daf¨ur eine weitere Testprozedur spendieren, k¨onnte dies so ausse- hen:

dublin$ Anagrams

Dies ist ein Test von GetLetterFrequencies!

C 1 D 1 E 9 F 1 G 1 I 4 L 1 N 3 O 1

(3)

Q 1 R 2 S 4 T 6 U 1 V 1 dublin$

Hinweise: Da es insgesamt 26 verschiedene Buchstaben im lateinischen Al- phabet gibt, sollten sie das H¨aufigkeits-Array entsprechend von 0 bis 25 indi- zieren, wobei 0 den Buchstaben “A” reprasentiert 1 den Buchstaben “B” bis hin zu 25, das f¨ur “Z” steht. Entsprechend ben¨otigen Sie eine Konvertierung in beide Richtungen:

• Vom Großbuchstaben zum zugeh¨origen Index:

index := ORD(letter) - ORD("A");

• Vom Index zum zugeh¨origen Großbuchstaben:

letter := CHR(ORD("A") + index);

Es empfiehlt sich, die Ausgabe der H¨aufigkeiten in eine ProzedurPrintLet- terFrequencies zu verpacken, da sie diese im n¨achsten Schritt ben¨otigen werden.

Schritt 3

Zwei Zeichenketten bilden jetzt ein Anagram, wenn nach der Anwendung von Normalize und GetLetterFrequencies f¨ur beide Zeichenketten die H¨aufigkeits-Arrays sich gleichen. Bei der Konstruktion eines Anagramms, ist es aber h¨aufig hilfreich zu erfahren, welche Buchstaben noch ¨ubrig bleiben bzw. ob bereits eine Verletzung der Anagram-Eigenschaft vorliegt, weil von einem Buchstaben bereits zuviel vergeben worden sind. Entsprechend ist die Differenz zweier H¨aufigkeits-Arrays interessant, die wiederum als H¨aufigkeits- Array repr¨asentiert wird.

Schreiben Sie also eine Prozedur SubtractLetterFrequencies, die zwei H¨aufigkeits-Arrays erh¨alt und ein H¨aufigkeits-Array zur¨uckliefert, in der die Differenzen zu finden sind. Damit Sie rasch herausfinden, ob ein Anagram gefunden worden ist, sollte diese Prozedur einenBOOLEAN-R¨uckgabewert liefern, der genau dann TRUE ist, falls die Differenz ¨uberall 0 betr¨agt.

So k¨onnte dann ein Dialog aussehen:

(4)

dublin$

dublin$ Anagrams Phrase #1: Hallo!

Phrase #2: Aloha!

This is not yet an anagram:

A -1 L 1

Phrase #1: Listen Phrase #2: Silent

Congratulations, you found an anagram!

Phrase #1: dublin$

Schritt 4

Wenn an einem Anagram gebastelt wird, ist es hilfreich, ein Wort herauszu- nehmen und mit dem Rest weiterzuarbeiten. Entsprechend w¨are eine Pro- zedur GenLetters sinnvoll, die ein H¨aufigkeits-Array in eine Zeichenkette verwandelt, die, wenn sie durch GetLetterFrequencies bearbeitet werden w¨urde, das gleiche H¨aufigkeits-Array wieder liefern w¨urde.

So k¨onnte dann der Dialog aussehen, wenn bei fehlender Anagram-Eigenschaft die verbliebenen Zeichen als Zeichenkette ausgegeben werden w¨urden:

dublin$ Anagrams

Phrase #1: Allgemeine Informatik Phrase #2: Erfolg

This is not yet an anagram:

A 2 E 2 I 3 K 1 L 1 M 2 N 2 T 1

Unused letters: AAEEIIIKLMMNNT Phrase #1: AAEEIIIKLMMNNT Phrase #2: mit

This is not yet an anagram:

A 2

(5)

E 2 I 2 K 1 L 1 M 1 N 2

Unused letters: AAEEIIKLMNN Phrase #1: AAEEIIKLMNN Phrase #2: Eile

This is not yet an anagram:

A 2 I 1 K 1 M 1 N 2

Unused letters: AAIKMNN Phrase #1: AAIKMNN Phrase #2: kam

This is not yet an anagram:

A 1 I 1 N 2

Unused letters: AINN

Phrase #1: Allgemeine Informatik Phrase #2: kam mit Erfolg in Eile an Congratulations, you found an anagram!

Phrase #1: dublin$

Referenzen

ÄHNLICHE DOKUMENTE

Laserdruckern vorgesehen sein. In diesem Fall ist das gesamte Trägerblatt von Etiketten bedeckt. Der Drucker kann durch andere Arten von Etiketten beschädigt werden, wenn sich

Als Quintessenz für die Maßnahmestrategien der Behörden im Feld öffentlicher Sicherheit in Europa lässt sich feststellen, dass die Bedro- hung durch den

Wenn Sie mutig sind, k¨ onnen Sie sich an die Prozedur Succeeded wagen, die TRUE zur¨ uckliefert, wenn in einer gegebenen Liste eine vorgegebene Zahl von Zahlen existiert,

Anschließend wird f¨ur die Clusterzentren eine Umgebung definiert, innerhalb dieser weitere Punkte durch einen zweiten Poissonprozess erzeugt werden.. Die Umgebung ist definiert

• Die WHILE-Schleife darf erst beendet werden, wenn wir das Adreßbuch vollst¨ andig durchgeschaut haben oder wir einen Eintrag mit dem gew¨ unschten Namen gefunden haben. Bei

Verfahren zur Aufstellung des Indizesfeldes: a) Man ordne die Symbole der retlektierenden Flächen nach ihren Z —Werten und stecke diese auf der Abszissenachse ab. Eintragung von _/2

Dies ist lediglich für die vierte Zeile der Tabelle (p=w, q=f, r=f) nicht der Fall.. Diese Belegung der Variablen muss folglich

• Jede Person muss jeder Personen des anderen Geschlechts einen eindeutigen Rang zuordnen (Priorit¨ atenliste)!.