Informatik Automaten teilbar durch 9?

9 Antworten

Soviele falsche Antworten. Einfach nur Herrlich kappa

Zur Frage:

Eine Zahl als Eingabe kann immer nur 1 Transitionsübergang bewirken. Oder was genau soll die Eingabe sein? Eine einzige Zahl? Wenn ja ist die Aufgabe nicht lösbar oder ihr haltet euch nicht an die reguläre Definition eines deterministisch endlichen Automaten.

Ansonsten kenne ich diese Art von Aufgabe als „Der Automat soll akzeptieren wenn die Anzahl von [beliebiger Buchstabe] durch x teilbar ist“. Da ist die Lösung ganz einfach: Restklassenring (jeder Zustand akzeptiert alle Elemente einer Restklasse bezüglich Modulo x)

Woher ich das weiß:Studium / Ausbildung – Promoviert

je nachdem ob das Programm die Rechnung mit Modulo (gibt Rest aus)zulässt könnte man einfach ne Abfrage y=x%9 machen und sagen wenn y=0 dann soll er die zahl akzeptieren

AutoEdit ist mir nicht bekannt, daher kann ich Dir keinen Programmcode zur Verfügung stellen.

Aber ich versuch mal zu erklären, was Du machen kannst:

  • Der Automat hat ein Eingabefeld, wo man eine Eingabe machen kann.
  • Ist die Eingabe gemacht, prüft der Automat, ob es eine Zahl ist - wenn nicht: Fehlermeldung und Bitte um neue Eingabe
  • Wenn es eine Zahl ist, teilt er die Zahl durch 9 und prüft, ob das Ergebnis Nachkommastellen hat (wenn es die Modulo-Funktion gibt, kannst Du auch prüfen, ob die Eingabe ohne Ret durch 9 teilbar ist) - ergibt die Prüfung, daß die Zahl durch 9 teilbar ist, gibt der Automat eine positive Meldung wie "Eingabe akzeptiert" - wenn nicht: Fehlermeldung und Bitte um neue Eingabe

AutoEdit kenn ich leider nicht (ich hab nen Video-Editor mit diesem Namen gefunden, aber das wirds wohl nicht sein).

Aber das Prinzip ist, wie hier auch schon mehrfach erwähnt, eines von diesen:

  1. Division mit Rest. Ist der Rest der Division der Eingabe durch 9 ungleich 0, dann wird die Zahl abgelehnt.
  2. Nachkommastellen. Entspricht der Quotient aus der Eingabe und 9 exakt seinem Wert als reine (ungerundete) Ganzzahl (Integer), dann wird die Zahl akzeptiert.

In Pseudcode könnte das ganze z.B. so aussehen:

zahl = eingabe()
wenn nicht ist_eine_zahl(zahl) dann:
   fehler()
wenn modulo(zahl, 9) == 0 dann:
   eingabe_akzeptieren()
ansonsten:
   eingabe_ablehnen()

Oder auch:

zahl = eingabe()
wenn nicht ist_eine_zahl(zahl) dann:
   fehler()
quotient9 = zahl/9
wenn quotient9 == ganzzahl(quotient9) dann:
   eingabe_akzeptieren()
ansonsten:
   eingabe_ablehnen()

Übrigens, alle Zahlen sind durch 9 teilbar. Manche davon mit Rest, mamche ohne. :)

Aber mal spaß beiseite.

Es gibt so viele Möglichkeiten... Mehrere wurden ja bereits genannt. Das einfachste wäre mit Modulo. Sollte es nicht möglich sein, wäre eine weitere Möglichkeit: die Zahl durch 9 zu teilen, das Ergebnis auf ganze Zahlen auf/abzurunden und die beiden Zahlen anschließend zu vergleichen. Wenn sie gleich sind, dsnn ist die ursprüngliche Zahl ohne Rest durch 9 teilbar.