AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen sortieren

Ein Thema von the_source · begonnen am 16. Jun 2006 · letzter Beitrag vom 19. Jun 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sharky
Sharky

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

Re: Variablen sortieren

  Alt 17. Jun 2006, 11:15
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;
                    ^^^^^^^^^^^
.
.
Stephan B.
  Mit Zitat antworten Zitat
the_source

Registriert seit: 16. Jun 2006
12 Beiträge
 
#12

Re: Variablen sortieren

  Alt 17. Jun 2006, 11:17
upps, wie dumm von mir, danke.

o man, wie peinlich ....
  Mit Zitat antworten Zitat
the_source

Registriert seit: 16. Jun 2006
12 Beiträge
 
#13

Re: Variablen sortieren

  Alt 17. Jun 2006, 11:24
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.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Variablen sortieren

  Alt 17. Jun 2006, 11:36
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:
type
  TCounterArray = array ['A'..'Z'] of Integer; // entweder so (nur Buchstaben)
  TCounterArray = array [Char] of Integer; // oder so (alle Zeichen)
Das Ansprechen der Arrayelemente sieht dann so aus:

Delphi-Quellcode:
var
  ch : Char;
  Arr : TCounterArray;
begin
  for ch := 'Ato 'Zdo
    Arr[ch] := 0;
  Arr['E'] := 100;
end;
Wenn du diesen Hinweis berücksichtigst, solltest du eigentlich mit einer Schleife auskommen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
the_source

Registriert seit: 16. Jun 2006
12 Beiträge
 
#15

Re: Variablen sortieren

  Alt 19. Jun 2006, 12:44
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;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#16

Re: Variablen sortieren

  Alt 19. Jun 2006, 13:18
Hallo,

Delphi-Quellcode:
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;
Alles klar?

btw: vielleicht solltest du noch mal über meinen Vorschlag aus Beitrag #14 nachdenken...

Gruß Hawkeye
  Mit Zitat antworten Zitat
markusl

Registriert seit: 25. Apr 2006
Ort: Rotkreuz
21 Beiträge
 
Delphi 5 Enterprise
 
#17

Re: Variablen sortieren

  Alt 19. Jun 2006, 13:33
Neben dem, was Hawkeye geschrieben hat, ist das Hauptproblem folgende Zeile:

Zitat:
sortArray[counterCOPY]:= countArray[counterSORT + 64];
Richtig wäre

sortArray[counterCOPY]:= countArray[counterCOPY + 64]; Kann Dir empfehlen für deine Tests auf jeden Fall das Range Checking im Compiler zu aktivieren (Menü Projekt -> Optionen -> Compiler -> Range Checking).

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
  Mit Zitat antworten Zitat
the_source

Registriert seit: 16. Jun 2006
12 Beiträge
 
#18

Re: Variablen sortieren

  Alt 19. Jun 2006, 18:08
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:
OutA.Caption:= IntToStr(countArray[65]);
OutB.Caption:= IntToStr(countArray[66]);
OutC.Caption:= IntToStr(countArray[67]);
usw...

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?
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#19

Re: Variablen sortieren

  Alt 19. Jun 2006, 18:27
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
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
the_source

Registriert seit: 16. Jun 2006
12 Beiträge
 
#20

Re: Variablen sortieren

  Alt 19. Jun 2006, 20:11
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:15 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