Autor Beitrag
lord.paddington
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: So 23.10.05 21:25 
kennt jemand einen funktionierenden Algorithmus zur Fehlererkennung?

Wenn Fehler neu, dann setze Zähler auf 1
wenn Fehler alt, dann inc Fehlerzähler für diesen Fehler

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
  if dummy = fehler[f] then//gibt es einen Fehler, der gleich dem dummy ist?
  begin
    inc(fehlerx[f]);//inc Fehlerz�ler fr diesen Fehler
  end else begin//wenn nicht gleich...
             fehler[f]:= dummy;//...dann lege einen neuen Fehler an
             fehlerx[f] := 1;//setze Z�ler auf 1
             inc(q);//inc den Gesamtfehlerz�ler
             exit;
            end;
end;


Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
Moderiert von user profile iconGausi: Topic aus VCL (Visual Component Library) verschoben am So 23.10.2005 um 21:46

_________________
pfutsch ist hin und hin ist pfutsch
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 23.10.05 21:50 
Was für Fehler willst du denn automatisch erkennen? Was ist denn deiner Meinung nach überhaupt ein "Fehler"?

_________________
We are, we were and will not be.
lord.paddington Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: So 23.10.05 21:58 
ok, ist ein bisschen irritierend...

streiche Fehler, nimm Büchersammlung

Habe eine Büchersammlung bspw. 1000 Bücher.
Nehme mir jetzt Buch für Buch vor und prüfe...

Lese Titel von Buch eins und prüfe, ob ich das Buch schon habe...
wenn ja, dann setze Zähler für diesen Buchtitel auf 2

Lese Titel von Buch 2 und prüfe, ob ich das Buch schon habe...
wenn nein, dann setze Zähler auf 1 und lege Buchtitel an

u.s.w.

_________________
pfutsch ist hin und hin ist pfutsch
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 23.10.05 22:24 
Langsam, aber sofort umzusetzen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Var
  BookList : TStringlist;

Begin
  Booklist := TStringlist.Create;
  Booklist.Sorted := True;
  ForEach Book in MyBooks do begin
     i := Booklist.indexOf (Book.Title);
     If i=-1 Then
       Booklist.AddObject (Book.Title, Pointer (1))
     else 
       Booklist.Objects[i] := Pointer (Integer (Booklist.Objects[i]) + 1);
     End;
End;

Ich verwende die Objects-Eigenschaft der TStringList, die eigentlich dazu dient, pro String ein Object mit zu speichern, einfach als Zähler.

Schneller wäre das mit einer entsprechend schnellen Datenstruktur, z.B. meinen String-Hashtabellen (such mal nach TStringDictionary hier, oder in der DP). In IniFiles schlummert eine Klasse, die bis ca. 30.000 Strings auch ganz schön schnell ist, die THashedStringList, damit geht o.g. Code viel schneller. Leider degeneriert die Performance bei sehr vielen Strings und dann ist die THashedStringList langsamer als eine normale TStringList..

_________________
Na denn, dann. Bis dann, denn.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 24.10.05 17:20 
Record währe hier eventuell angemessen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TBook = record
    Name: String;
    Anzahl: Integer;
  end;

var
  Book: Array of TBook;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
var
  FindBook: Integer;
  Found:    Boolean;
begin
  for ...   // Je nachdem wie du deine Bücher holst...
  begin
    Found := False;

    for FindBook := 0 to Length(Book) do
      if Book[FindBook].Name = 'Herr der Ringe' then
      begin
        Found := True;
        Book[FindBook].Anzahl := Book[FindBook].Anzahl + 1;
      end;

    if not (Found) then
    begin
      SetLength(Book, Length(Book) + 1);
      Book[Length(Book) - 1].Name   := 'Herr der Ringe';
      Book[Length(Book) - 1].Anzahl := 1;
    end;
  end;
end;

(ungetestet)

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)