AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi [Gelöst] Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur
Thema durchsuchen
Ansicht
Themen-Optionen

[Gelöst] Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

Ein Thema von phate2613 · begonnen am 9. Nov 2010 · letzter Beitrag vom 9. Nov 2010
Antwort Antwort
phate2613

Registriert seit: 12. Okt 2008
Ort: Berlin
14 Beiträge
 
RAD-Studio 2009 Arc
 
#1

[Gelöst] Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

  Alt 9. Nov 2010, 16:08
Guten Tag,

für meine Abi-Arbeit(BLL) schreibe ich derzeit an einem Algorithmus, der die Anordnung der Buchstaben auf einer Handytastatur durchprobiert.

Eine Handytastatur sieht so aus:

1 2 3
4 5 6
7 8 9
# 0 *

Auf den Tasten 2 - 9 werden die Buchstaben alphabetisch in 3er- bzw. 4er-Gruppen geordnet. Die Anordnung ist aber nicht optimal und hier beginnt meine BLL.

Mein Programm soll nun ALLE Möglichkeiten der alphabetischen Anordnung durchprobieren.

Dies geschieht nach folgendem Muster:

Auf den Tasten 2-8 wird jeweils ein Buchstabe gelegt, die restlichen befinden sich auf Taste 9 - das ist der Ausgangzustand.

2 - a
3 - b
usw.
9 - h i j k l ... y z

Nun wird pro Schritt ein Buchstabe von Taste 9 auf Taste 8 verschoben, bis auf der Taste 9 nur ein Buchstabe liegt - z. Tritt dieser Fall ein, wird von Taste 8 der erste Buchstabe auf Taste 7 verschoben, der zweite Buchstabe rutscht nach vorne und die restlichen werden wieder auf die Taste 9 gepackt - vor das z natürlich.

Spielt man das weiter durch, ist der erste Buchstabe auf der Taste 8 das y und der erste Buchstabe von Taste 7 rutscht auf Taste 6, der zweite an die erste Stelle, der dritte geht auf Taste 8 und die restlichen wieder auf Taste 9.

Soweit so gut, nur die Umsetzung in Delphicode treibt mich in den Wahnsinn. Es gibt anscheinend noch einige Fehler und ich komme seit einigen Tagen einfach überhaupt nicht weiter und hoffe, ihr könnt mir vielleicht auf die Sprünge helfen.

Der Fehler tritt auf, wenn er anfängt von Taste 6 auf Taste 5 zu verschieben, beim Verschieben auf Taste 9 zurück, "schluckt" er dann das z und damit kommt er dann natürlich nicht mehr klar.

Kommentare zum Code:
- Ich spreche von Ebene und nicht von Taste
- TTaste ist ein Record mit T: array[1..19] of Char
- Tasten ist ein array[2..9] of TTaste
- TEbenenzeiger ist ein Integer
- NOCHAR ist eine Konstante mit dem Wert "-" und dient als Zeichen, dass ein Platz auf der Taste nicht belegt ist

- die Prozedur Schritt wird aus der Gui aufgerufen, die danach den momentanen Status der Tastatur ausgibt.

Delphi-Quellcode:
procedure TSortieren.Schritt;
begin
  Von := HoechsteEbeneMitMehrAlsEinemBuchstaben;
  Nach := Von - 1;

  if Von = 2 then
  begin
    Running := false;
    Exit;
  end;

  if HoechsteEbeneMitMehrAlsEinemBuchstaben <> 9 then
  begin
    VerschiebeZurueckAufEbene9( );
  end
  else
  begin
    VerschiebeErstenBuchstaben( );
  end;

  SpeichereMusterInCache( Tasten );
end;

procedure TSortieren.VerschiebeAlleElementeUmEinsNachVorne( Start: Integer; Ebene: TEbenenZeiger );
var
  J: Integer;
begin
  for J := Start to 18 do
  begin
    Tasten.T[Ebene].T[J] := Tasten.T[Ebene].T[J+1];
  end;
  Tasten.T[Ebene].T[19] := NOCHAR;
end;

procedure TSortieren.VerschiebeErstenBuchstaben();
var
  I, EinfuegePosition: Integer;
begin
  EinfuegePosition := 0;

  for I := 2 to 19 do
  begin
    if Tasten.T[Nach].T[I] = NOCHAR then
    begin
      EinfuegePosition := I;
      Break;
    end;
  end;

  Tasten.T[Nach].T[EinfuegePosition] := Tasten.T[Von].T[1];
  VerschiebeAlleElementeUmEinsNachVorne( 1, Von );
end;

//durchläuft alle Ebenen und sucht die erste Taste deren erster Buchstabe, der ist, den sie höchstens haben kann
function TSortieren.HoechsteEbeneMitMehrAlsEinemBuchstaben: TEbenenZeiger;
var
  res: TEbenenZeiger;
  i: Integer;
begin
  res := 0;

  for i := 3 to 9 do
  begin
    if Tasten.T[i].T[1] = EbenenBuchstaben[i] then
    begin
      res := i-1;
      break;
    end;
  end;

  if res = 0 then
    res := 9;

  result := res;
end;

procedure TSortieren.VerschiebeZurueckAufEbene9();
var
  I,J,K,L: Integer;
  TempTaste: TTaste;
  aEbene: TEbenenZeiger;
begin
  aEbene := Von;

  //Ersten Buchstaben auf Ebene davor verschieben
  VerschiebeErstenBuchstaben( );

  //Taste kopieren
  TempTaste := Tasten.T[aEbene];

  //Ersten Buchstaben behalten und den Rest überschreiben
  Tasten.T[aEbene].T[1] := TempTaste.T[1];
  for I := 2 to 19 do
  begin
    Tasten.T[aEbene].T[I] := NOCHAR;
  end;

  //Nach vorn verschieben
  for L := 1 to 18 do
  begin
    TempTaste.T[L] := TempTaste.T[L+1];
  end;
  TempTaste.T[19] := NOCHAR;

  //Erste leere Position auf der Temptaste suchen und in L speichern
  for I := 1 to 19 do
  begin
    if Temptaste.T[I] = NOCHAR then
    begin
      L := I;
      Break;
    end;
  end;

  //den ersten Buchstaben der Ebene ans Ende der TT kopieren und
  //durch den ersten der TT ersetzen
  for K := aEbene+1 to 9 do
  begin
    TempTaste.T[L] := Tasten.T[K].T[1]; <-------- HIER LAG DER FEHLER
    Inc( L );
  end;

  for K := aEbene+1 to 8 do
  begin
    Tasten.T[K].T[1] := TempTaste.T[1];

    for L := 1 to 18 do
    begin
      TempTaste.T[L] := TempTaste.T[L+1];
    end;
    TempTaste.T[19] := NOCHAR;
  end;

  Tasten.T[9].T := TempTaste.T;
end;
Entwicklungsumgebung ist Delphi 2009
Stefan Rehbein

Geändert von phate2613 ( 9. Nov 2010 um 20:47 Uhr) Grund: Funktion im Quellcode vergessen einzufüge
  Mit Zitat antworten Zitat
Ruio

Registriert seit: 6. Nov 2008
89 Beiträge
 
Delphi 2005 Personal
 
#2

AW: Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

  Alt 9. Nov 2010, 19:34
Bei mir passiert gar nichts.
Beim starten:
Code:
---------------------------
informatikbll
---------------------------
Ungültiger Dateiname - %s.
---------------------------
OK  
---------------------------
Beim Klick auf Schritt gibts ne AV(Zugriffsverletzung bei Adresse 00467707 in Modul 'informatikBll.exe'. Lesen von Adresse 0000793E.) und bei GO passiert gar nichts.
Beim beenden versucht das Programm auf Adresse 00000000 zuzugreifen
  Mit Zitat antworten Zitat
phate2613

Registriert seit: 12. Okt 2008
Ort: Berlin
14 Beiträge
 
RAD-Studio 2009 Arc
 
#3

AW: Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

  Alt 9. Nov 2010, 19:48
Das liegt daran, dass der jedes Muster in einer Datei abspeichert, ich habe jetzt alle entsprechenden Funktionen auskommentiert und die aktualisierte Version hochgeladen

Bei Klick auf GO soll bisher auch nichts passieren, diese Funktionen ist noch nicht geschrieben.
Stefan Rehbein
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

  Alt 9. Nov 2010, 19:53
EXE geht bei mir nicht. (WIN XP SP3)

Die Idee, die Texteingabe zu verbessern, ist grundsätzlich gut!

Aber:
ich würde die BUCHSTABENHÄUFIGKEIT berücksichtigen und für die
Wortvorschläge (Autocomplete) die WORTHÄUFIGKEIT.
.
Download der häufigsten Wörter
.

Geändert von hathor ( 9. Nov 2010 um 19:58 Uhr)
  Mit Zitat antworten Zitat
phate2613

Registriert seit: 12. Okt 2008
Ort: Berlin
14 Beiträge
 
RAD-Studio 2009 Arc
 
#5

AW: Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

  Alt 9. Nov 2010, 19:57
Funktioniert inwiefern nicht?

Ja, ich werde im nächsten Schritt auch die Buchstabenhäufigkeit beachten, aber es geht bei diesem Programm nur darum, alle Möglichkeiten der Anordnung zu berechnen, um aus diesen dann den effektivsten auszuwählen.

Aber trotzdem danke!
Stefan Rehbein
  Mit Zitat antworten Zitat
phate2613

Registriert seit: 12. Okt 2008
Ort: Berlin
14 Beiträge
 
RAD-Studio 2009 Arc
 
#6

AW: Kombinatorik / Anordnung von Buchstaben auf einer Handytastatur

  Alt 9. Nov 2010, 20:45
Problem ist gelöst, wens interessiert:

Die temporäre Taste hatte ebenfalls nur 19 Plätze zur Verfügung, (19 deswegen, weil das für die normalen Tasten die maximale Anzahl Buchstaben ist) es werden allerdings mehr benötigt bzw. dadurch dass nicht genug Plätze da waren, kopierte er mehrmals an den 19ten Platz...

Trotzdem danke für dich Hilfe.

Wünscht mir viel Glück bei der BLL
Stefan Rehbein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz