![]() |
Re: Telefonbuch
So da bin ich wieder und die Suchfunktion habe ich so umgeschrieben, funktion iert auch suer :)
Delphi-Quellcode:
jetzt brauch ich nur noch Tipps, wegen dem Sortieren, habe das jetzt mit Stringlist gemacht, aber das ist ja iwie doof, da ordnet der den Namen ja nicht mehr der Person zu und das sollte ja eigentlich so bleiben...Tipps?
begin
SuchName:=edit6.text; AnzahlEintraege:=Telefonbuch.Count div 2; for i:=AnzahlEintraege-1 downto 0 do if Telefonbuch[i*2]=SuchName then begin showmessage(Suchname+' wurde gefunden. Die Telefonnummer lautet: '+Telefonbuch[i*2+1]); end else if Telefonbuch[i*2+1]=SuchName then begin showmessage(Suchname+'wurde gefunden. Der Name lautet:'+Telefonbuch[i*2]); end; end; |
Re: Telefonbuch
Und genau deshalb hatte ich den kompletten Datensatz in eine Zeile geschrieben. Da müsste man nur in der Sortierroutine das entsprechende Feld "herauspuhlen" und könnte dann ganz easy die Reihenfolge tauschen. alleinherrscher, übernehmen Sie :mrgreen:
|
Re: Telefonbuch
Hey, sehr gut hast du das gemacht mit der Suchfunktion!
Also mit dem Sortieren: Ich würde als erstes eine Funktion bauen, die dir zwei Einträge deines Telefonbuchs tauscht. Dann kannst du den rest mit gängigen Sortieralgorithmen machen. Also fangen wir mal an:
Delphi-Quellcode:
//edit: zwei kleine Fehler entfernt (um 15.06 Uhr)procedure TForm1.TauscheTelefonbuchEintrag(Index1,Index2:integer); var TauschName,TauschTelefonnummer:string; Anzahl:integer; begin //zunächst sicherstellen, dass beide Einträge kleiner als die Anzahl der Telefonbucheinträge sind: Anzahl:=Telefonbuch.count div 2; if (Index1>Anzahl-1) or (Index2>Anzahl-1) then exit; //Den Eintrag mit Nummer Index1 in dem Zwischenspeicher schreiben: Tauschname:=Telefonbuch[2*Index1]; TauschTelefonnummer:=Telefonbuch[2*Index1+1]; //Eintrag Index2 in Eintrag Index1 schreiben: Telefonbuch[2*Index1]:=Telefonbuch[2*Index2]; Telefonbuch[2*Index1+1]:=Telefonbuch[2*Index2+1]; //Eintrag Index2 aus Zwischenspeicher lesen: Telefonbuch[2*Index2]:=Tauschname; Telefonbuch[2*Index2+1]:=TauschTelefonnummer; end; |
Re: Telefonbuch
bevor ich damit anfange, was ist mit INdex1/2 gemeint? Der Inhalt des gespeicherten oder wie?
|
Re: Telefonbuch
Zitat:
warte ich mache ein bildchen dazu... |
Re: Telefonbuch
okay
|
Re: Telefonbuch
Liste der Anhänge anzeigen (Anzahl: 2)
Index1 und Index2 sind also die Indizes der Telefonbucheinträge, also die zweite Spalte in der Grafik
Du könntest also sagen: Tausche Eintrag 0 und Eintrag 1. Dann würde Hans Dieter und Tante Käthe inkl. Telefonnummer getauscht. okay? //EDIT: Alle Fehler behoben //Edit: So, nun schonmal weiter im Programm: Frage: Wie können wir einfach nach Namen sortieren? Die intuitive Antwort ist doch: 1) Suche aus meiner Liste den Namen heraus, dessen Buchstaben, verglichen mit allen anderen Namen in der Liste, am weitesten vorne im Alphabet stehen. 2) Tausche diesen Eintrag an den Anfang der Liste. 3) Betrachte dir jetzt nur noch den Rest der Liste und suche erneut aus den verbleibenden Namen in der Liste den Namen, der am weitesten vorne im Alphabet steht. 4) Tausche den Namen auf die zweite Position in der Liste 5) usw... Wir brauchen also nun folgende Hilfsmittel, um die Suche durchführen zu können: 1. FOR-Schleifen 2. Eine Funktion, die die Namen miteinander vergleicht, und entscheidet, welcher Name weiter vorn im Alphabet steht. Dies leistet die Funktion ![]() 3. Unsere Tauschprozedur TauscheTelefonbuchEintrag Überleg dir mal ein bisschen was dazu, und dann machen wir weiter :zwinker: |
Re: Telefonbuch
Okay, das Prinzip habe ich verstanden....
also nur die Theorie, beim Umsetzen...ähm...naja....kam nichts Gescheites raus :roll: |
Re: Telefonbuch
Okay.
Also etwas pseudo-code:
Code:
Erklärung: i und j sind Laufindizes, die durch eine FOR Schleife hochgezählt werden.
Zähle j von 0 bis Anzahl_der_Telefonbucheinträge-1 hoch
Tauschindex=j Zähle i von j bis Anzahl_der_Telefonbucheinträge-1 hoch Falls Telefonbucheintrag[2*i] weiter vorn im Alphabet steht als Telefonbucheintrag[2*TauschIndex] dann: Setze TauschIndex=i Tausche_Telefonbucheintrag(j,TauschIndex) TauschIndex enthält den Index des Namens im TElefonbuch, der am weitestens vorne im Alphabet steht. Versuch mal, das in Delphi Code umzubauen. Wenn du noch Verständnisfragen hast, sag bescheid. Als Hilfe: Die If-Abfrage kannst du so programmieren:
Delphi-Quellcode:
if CompareStr(Telefonbuch[2*i],Telefonbuch[2*TauschIndex])<0 then
TauschIndex:=i; ![]() Viel Erfolg! //edit: wieder mal ne kleine Code-Korrektur...sry... |
Re: Telefonbuch
okay, mein Versuch ^^:
Delphi-Quellcode:
ich weiß, ich bin unfähig >.<
for i:=0 downto AnzahlEintraege-1 do
Tauschindex:=j; for i[j]:=0 downto AnzahlEintraege-1 do If Telefonbucheintrag[2*i]>Telefonbucheintrag[2*Tauschindex]; then TauschIndex:=i; Tausche_Telefonbucheintrag(j,Tauschindex); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz