# Anagramm programmieren mit Assembler



## Frank1 (6. März 2005)

Hallo,
ich möchte ein Anagramm schreiben ,dass mit ein wort merehre wörter generieren.
Z.B. das wort *MEHL*,mit die Buschstaben dieser wort andere wörter erzeurgen.
Wär sehr nett wenn mir da jemand helfen kann!




Danke für dein Anwort,
die Wörter müssen generiert werden .


Hallo,
ich habe versucht ein Programm zu schreiben dass alle Anagramm eines wortes ausgibt.Hier ist das code,kann mir jemand weiterhelfen,da mein code ein paar davon generiert.
         dosseg
  .model small
  .stack 100h
  .data

      msg db  "EIS",0
      string1  db  "Es gibt f?r das Wort ",0
      string2  db  "m”glichen Anagramme.",0
      string3  db  "Die L„nge des Wortes betr„gt:",0
      l„nge    dw   ?
      zeichen  dw   ?
      n        dw   ?


 include macros.mac
 jumps
 perm macro
  schleife:
  mov al, msg[si]
  mov Zeichen, ax
  writeS Zeichen

 boucle: 
  cmp di, si
  je weiter
  mov al, msg[di]
  mov Zeichen, ax
  writeS Zeichen
  inc di
  cmp di, l„nge
  jb boucle

 weiter:
  inc di
  cmp di, l„nge
  jb boucle

  nl
  xor di, di
  inc si
  cmp si, l„nge
  jb schleife

 endm

  .code

laenge_bestimmen  proc  ;Anweisung f?r Unterprogramm
       xor si,si  ;si-Register l”schen
loopo:
          mov al, msg[si] ;Zeichen, wo si zeigt nach al laden
          inc si  ;si erh”hen
          cmp al,0h  ;vergleiche Zeichen in al mit Null-Byte, d.h Ende des String
          jne loopo  ;springe, wenn ungleich nach loop0
          mov l„nge,si  ;wenn gleich, lade si nach l„nge
          dec l„nge  ;l„nge erniedrigen um den Null-Byte nicht mitzuz„hlen
          writeS string3
          writez l„nge  ;Ausgabe der L„nge der Zeichenkette

          ret
laenge_bestimmen endp  ;Ende des Untgerprogramms 
  start:
        mov ax,@data
        mov ds,ax

 call laenge_bestimmen  ;ERGEBNIS Stringl„nge
 nl
;****************************************************************************
;Hier wird die Anzahl der m”glichen Anagrammen berechnet
;**************************************************************************** 
 mov ax, l„nge   ;ax mit l„nge des String laden
 mov n, ax   ;Variable n mit ax laden
 sub ax, 1   ;ax um 1 erniedrigen
 mov cx, ax    ;Anzahl der Durchl„ufe fur loop-Befehl
 mov ax, n   ;n nach ax 
fac: sub n, 1   ;n = n-1
 mul n    ;ax=ax*n
 loop fac   ;wiederhole fac bis cx=0

 writeS string1
 writeS msg
 writeZ ax
 writeS string2
 nl
;****************************************************************************
;Ausgabe der Anagramme (die haben nicht unbedingt ein Sinn)
;****************************************************************************
 xor bx, bx
 mov di, l„nge
 sub di, 2
 mov si, di


 perm

;****************************************************************************
pende: mov ax,4c00h  ;Anweisung zur Terminierung des Programms
 int 21h

 end start


----------



## stephsto (6. März 2005)

Hallo,

interessantes Projekt, aber einige Fragen werfen sich auf, müssen es Wörter sein, die generiert werden oder Buchstabenkombinationen also möchtest du *HELM* oder auch ein gewirr aus Buchstaben wie zum Beispiek *LMHE* sollte letzteres der Fall sein hab ich keine Idee wie man das mit Assembler realisieren könnte, da würde ich dann empfehlen auf eine Hochsprache umzusteigen und diese dann halt möglichst Assemblernah zu nutzen. Ist ersteres der Fall dann müsstest du halt zu erst einmal eine Art Bibliothek anlegen, in der jede Menge Wörter drinstehen. Hast du dieses musst du Anfangen indem du die Länge des Strings nimmst und den String bloß mit den Strings in der Bibliothek vergleichst, die gleich lang sind. Dann musst du Buchstabe für Buchstabe vergleichen. Also anfangen mit M dann den anderen String auf Ms untersuchen und so weiter. Sobald nix gefunden wird gleich abbrechen.

Ganz schöner Aufwand
Gruß stephsto


----------

