![]() |
Re: Variablen sortieren
Hai the_source,
was fällt dir hier auf? ;-)
Code:
var
countArray: Array[[color=red]1..26[/color]] of Integer; begin . . for counterCHAR:= [color=red]65 to 90[/color] do ^^^^^^^^^^^ begin if UpperCase(s[counterMAIN]) = CHR(counterCHAR) then begin countArray[counterCHAR]:= countArray[counterCHAR] + 1; ^^^^^^^^^^^ . . |
Re: Variablen sortieren
upps, wie dumm von mir, danke.
o man, wie peinlich .... :oops: |
Re: Variablen sortieren
ah sehr gut, jetzt funktioniert es wunderbar. Jetzt muss ich nur noch wissen, wie ich bei der Label-Zuordung eine Schleife einbauen kann, und wie ich den höchsten eintrag im Array rausbekomme.
|
Re: Variablen sortieren
Hallo the_source,
du kannst dein Programm deutlich vereinfachen, wenn du als Indextyp für das Zählerarray "Char" statt "Integer" wählst:
Delphi-Quellcode:
Das Ansprechen der Arrayelemente sieht dann so aus:
type
TCounterArray = array ['A'..'Z'] of Integer; // entweder so (nur Buchstaben) TCounterArray = array [Char] of Integer; // oder so (alle Zeichen)
Delphi-Quellcode:
Wenn du diesen Hinweis berücksichtigst, solltest du eigentlich mit einer Schleife auskommen.
var
ch : Char; Arr : TCounterArray; begin for ch := 'A' to 'Z' do Arr[ch] := 0; Arr['E'] := 100; end; Gruß Hawkeye |
Re: Variablen sortieren
hmm, kann mir irgenwer erklären, warum der höchste Wert (wir hier provisorisch uf Label1 ausgeben) falsch ist?
Delphi-Quellcode:
procedure TForm1.StartClick(Sender: TObject);
var s:String; counterMAIN:Integer; counterSET:Integer; counterCHAR:Integer; counterCOPY:Integer; counterSORT:Integer; countDEF:Integer; laenge:Integer; countArray: Array[65..90] of Integer; sortArray: Array[1..26] of Integer; unSort:boolean; tmp: Integer; begin for counterSET:= 1 to 26 do begin countArray[counterSET]:= 0; end; countDEF:= 0; s:= eingabe.Text; laenge:= Length(s); ProgressBar1.Max:= laenge; unSort:= true; for counterMAIN:= 1 to laenge do begin for counterCHAR:= 65 to 90 do begin if UpperCase(s[counterMAIN]) = CHR(counterCHAR) then begin countArray[counterCHAR]:= countArray[counterCHAR] + 1; countDEF:= countDEF + 1; end; end; ProgressBar1.Position:= ProgressBar1.Position + 1; end; for counterCOPY:= 1 to 26 do begin sortArray[counterCOPY]:= countArray[counterSORT + 64]; end; while unSort = true do begin unSort:= false; for counterSORT:= 1 to 26 do begin if sortArray[counterSORT] < sortArray[counterSORT + 1] then begin tmp:= sortArray[counterSORT]; sortArray[counterSORT]:= sortArray[counterSORT + 1]; sortArray[counterSORT + 1]:= tmp; unSort:= true; end; end; end; OutA.Caption:= IntToStr(countArray[65]); OutB.Caption:= IntToStr(countArray[66]); OutC.Caption:= IntToStr(countArray[67]); OutD.Caption:= IntToStr(countArray[68]); OutE.Caption:= IntToStr(countArray[69]); OutF.Caption:= IntToStr(countArray[70]); OutG.Caption:= IntToStr(countArray[71]); OutH.Caption:= IntToStr(countArray[72]); OutI.Caption:= IntToStr(countArray[73]); OutJ.Caption:= IntToStr(countArray[74]); OutK.Caption:= IntToStr(countArray[75]); OutL.Caption:= IntToStr(countArray[76]); OutM.Caption:= IntToStr(countArray[77]); OutN.Caption:= IntToStr(countArray[78]); OutO.Caption:= IntToStr(countArray[79]); OutP.Caption:= IntToStr(countArray[80]); OutQ.Caption:= IntToStr(countArray[81]); OutR.Caption:= IntToStr(countArray[82]); OutS.Caption:= IntToStr(countArray[83]); OutT.Caption:= IntToStr(countArray[84]); OutU.Caption:= IntToStr(countArray[85]); OutV.Caption:= IntToStr(countArray[86]); OutW.Caption:= IntToStr(countArray[87]); OutX.Caption:= IntToStr(countArray[88]); OutY.Caption:= IntToStr(countArray[89]); OutZ.Caption:= IntToStr(countArray[90]); OutGES.Caption:= IntToStr(countDEF); Label1.Caption:= IntToStr(sortArray[1]); end; |
Re: Variablen sortieren
Hallo,
Delphi-Quellcode:
Alles klar?
var
countArray: Array[65..90] of Integer; // <-- 65..90 sortArray: Array[1..26] of Integer; begin for counterSET:= 1 to 26 do // <-- 1..26 => Crash! begin countArray[counterSET]:= 0; end; : for counterSORT:= 1 to 26 do // <-- 1..26 begin if sortArray[counterSORT] < sortArray[counterSORT + 1] then // <-- 26 + 1 => Crash! begin tmp:= sortArray[counterSORT]; sortArray[counterSORT]:= sortArray[counterSORT + 1]; // <-- 26 + 1 => Crash! sortArray[counterSORT + 1]:= tmp; unSort:= true; end; end; end; end; btw: vielleicht solltest du noch mal über meinen Vorschlag aus Beitrag #14 nachdenken... Gruß Hawkeye |
Re: Variablen sortieren
Neben dem, was Hawkeye geschrieben hat, ist das Hauptproblem folgende Zeile:
Zitat:
Delphi-Quellcode:
Kann Dir empfehlen für deine Tests auf jeden Fall das Range Checking im Compiler zu aktivieren (Menü Projekt -> Optionen -> Compiler -> Range Checking).
sortArray[counterCOPY]:= countArray[counterCOPY + 64];
Oder den betroffenen Code mit {$R+} <Code> {$R-} umgeben Desweiteren wurde ja schon gesagt, dass die beiden geschachtelten Schleifen eigentlich nicht nötig sind und unnötig Rechenzeit kosten. Im ungünstigsten Fall, wenn dein Text nur aus "Z" besteht hast du das schlechteste Laufzeitverhalten. HTH Markus |
Re: Variablen sortieren
Ah danke, einfach nur die Variablen vertauscht.
So, es läuft, ich bin zufrieden. Jetzt wäre es noch toll, wenn ich diese riesige Liste an Zuweisungen wegbekäme.
Delphi-Quellcode:
usw...
OutA.Caption:= IntToStr(countArray[65]);
OutB.Caption:= IntToStr(countArray[66]); OutC.Caption:= IntToStr(countArray[67]); das ganze gibts dann bis 26 und insgesamt 3 mal (einmal für Label, einmal mür Max-Wert der Anzeige und nochmal für den Wert der Anzeige) und das muss doch sicherlich nicht sein. Darum meine Frage: wie kann ich daraus eine Schleife machen? |
Re: Variablen sortieren
du packst deine OutX's (sagen wir mal es sind Label) in ein "Array of Label" (das musst du wohl oder übel dann einmal machen) und dann kannst du bei allen weiteren Vorkommen die Schleife nehmen
|
Re: Variablen sortieren
hmm also habs mal zum testen erstellt, aber irgendwie blick ich nicht ganz durch. Ich kann dem Array keinen Typ "Label" geben, dann meckert er. Und wie muss ich dann später den Namen der Labels einfügen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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