AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Programm, das Zeichen in einem Wort zählt - BinarySearchTree

Programm, das Zeichen in einem Wort zählt - BinarySearchTree

Ein Thema von Kudle · begonnen am 13. Nov 2012 · letzter Beitrag vom 13. Nov 2012
Antwort Antwort
Kudle

Registriert seit: 31. Okt 2010
14 Beiträge
 
#1

Programm, das Zeichen in einem Wort zählt - BinarySearchTree

  Alt 13. Nov 2012, 08:46
Delphi-Version: 7
Hallo Delphi-Experten,

ich sitze momentan an einem Projekt, das allgemein Zeichen in einem Wort zählen soll. Man gibt ein beliebiges Wort in ein Memo ein und erhält in dem zweiten Memo nach klicken auf den Button "btZeichenanzahl" einen Buchstaben plus die Anzahl (z.B. A 3, B 4, C 2).

Für das Programm werden die Units mZeichenanzahl (Hauptformular), mZeichenzaehler, mZeichenzahl, mBinarySearchTree, mItem, mBinaryTree und mListenstruktur verwendet.

Im Anhang befindet sich mein Ansatz, jedoch komme ich momentan nicht mehr weiter...

Ich wäre euch sehr dankbar, wenn mir jemand bei diesem Problem behilflich ist

Mfg,

Kudle
Angehängte Dateien
Dateityp: zip Zeichenzähler.zip (260,2 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.248 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Programm, das Zeichen in einem Wort zählt - BinarySearchTree

  Alt 13. Nov 2012, 09:12
Hai Kudle,

ich habe hier kein Delphi und kann dein Projekt nicht öffnen.

Aber mal ein "grober" ansatz. Jedes Zeichen (nicht unicode) hat einen ASCII Wert von 0 bis 255.
Also erzeuge Dir doch ein Array dieser größe, gehe jedes Zeichen des Strings durch und Incrementiere immer die Position im Array die dem ASCII Wert des Zeichens entspricht.

Delphi-Referenz durchsuchenOrd
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#3

AW: Programm, das Zeichen in einem Wort zählt - BinarySearchTree

  Alt 13. Nov 2012, 10:03
Den Ansatz mit dem Array find ich zwar klasse, aber ich vermute stark, dass Kudle das mit einem Binärbaum lösen soll. Da ich selbst kein Delphi zur Hand habe habe ich den Code nur mal kurz überflogen, prinzipiell hast du aber in den Units alle notwendigen Klassen zur Hand.

Prinzipielles:
  • TItem ist doppelt deklariert, einmal in mBinarySearchTree.pas, einmal in mItem.pas
  • benötigt man die Klassen aus mListenstruktur? Kann man glaube ich weglassen.
  • grundsätzliches zu einem Binärbaum findest du bspw. hier: https://de.wikipedia.org/wiki/Bin%C3%A4rbaum
  • in den vorhanden Klassen der Binärbaum so implementiert ist, dass die Items, welche angefügt werden, von TItem abgeleitet sein müssen. Dabei müssen die Funktionen isEqual, isGreater, isLess überschrieben werden
    --> dadurch kann der B-Baum die komplette Einsortierung, Suche etc. durchführen, ohne dass du dich noch großartig drum kümmern musst

Grobimplementierung:
  • in deinem Formular benötigst du eine Instanz von mBinarySearchTree
  • in einer Routine jedes Zeichen aus der Eingabe durchgehen und in eine Instanz von TZeichenZahl schreiben
  • diese Instanz an TBinarySearchTree.insert übergeben
  • das Item suchen
  • den Wert um 1 erhöhen
  • wenn du damit fertig bist ist dein Baum gefüllt, nun kann die Ausgabe erfolgen
  • mit getItem, getLeftTree, getRightTree den baum durchgehen und die Werte ausgeben

Ich hoffe mal das passt so, ich konnte es wie gesagt selbst nicht testen und hab mir das alles on-the-fly überlegt
Jonas

Geändert von Aurelius (13. Nov 2012 um 10:15 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Programm, das Zeichen in einem Wort zählt - BinarySearchTree

  Alt 13. Nov 2012, 15:10
Ich weiß nicht ob du was spezielles suchst, aber auf die Schnelle Just4Fun:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  x = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZäöüÄÖÜß0123456789';
var
  s: String;
  i, k: Integer;
begin
  s := Memo1.Lines.Text;
  Memo2.Clear;

  for i := 1 to Length(x) do
  begin
    k := 0;
    while Pos(x[i], s) > 0 do
    begin
      s[Pos(x[i], s)] := '~';
      Inc(k);
    end;
    if k > 0 then //wenn auch fehlende Zeichen angezeigt werden sollen, dann die Zeile weg
      Memo2.Lines.Add(x[i] + ' = ' + IntToStr(k));
  end;
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf