Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 17.08.10 22:13 
Hi Delpher,
jetzt habe ich mal ein echtes "Logical".
Eine Schulklasse hat einen bestimmten Büchersatz bekommen. Eine andere Klasse hat (meistens) einen anderen Büchersatz.
Aber die gleiche Klasse hat ja wohl den gleichen Büchersatz.
Die Klassenbezeichnungen stehen in edit2 und in edit3.
Ich kann also, wenn ein Schüler die Klasse wechselt, die zu behaltenden Bücher bestimmen und die abzugebenden.
Meist geht es um ein Absteigen (früher Sitzenbleiben) oder einen Klassenwechsel innerhalb der Klassenstufe.
Aber wenn ich die gleiche Klasse untersuche - (vorher = nachher), sollten sie den gleichen Büchersatz haben.
Hier wird iwi das letzte Buch bei der Nach-Klasse "verschluckt" - und da ist der Logikfehler, den ich um's
Verrecken nicht sehe.

Code:
ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
if gef1 and gef2 then
  begin
    TntMemo1.lines.clear;
    TntMemo1.Font.Size := 8// TntMemo1.Font.name := 'Courier New'; TntMemo1.font.style := [];
    TntMemo1.lines.add('Es ergeben sich folgende Buchbewegungen:');
    TntMemo1.lines.add(' ');
    anz12 := 0; anz21 := 0;  tanz := 0;                      // Tb ?
    tanz := 10 * strtoint(BuchMain.QAusleihsatz.Fields[BuchMain.QAusleihsatz.fieldcount-1].fieldname[6]) +
                 strtoint(BuchMain.QAusleihsatz.Fields[BuchMain.QAusleihsatz.fieldcount-1].fieldname[7]) ;
    for k := 1 to tanz do begin b12[k] := ''; b21[k] := ''; bsl[k] := ''end;

    TntMemo1.lines.add(' ');
    TntMemo1.lines.add('VON-Klasse '+edit2.text+' gefunden.       Sie hat folgende Bücher: ');
    TntMemo1.lines.add(' ');
    n := BuchMain.QAusleihsatz.fieldbyname('TITEL01').FieldNo-1;  // = 3
    repeat
      if BuchMain.QAusleihsatz.fields[n].asstring <> '' then
      begin
        b12[n-2] := BuchMain.QAusleihsatz.fields[n].asstring;
        TntMemo1.Lines.Add(b12[n-2]);
        inc(n);
      end;
    until (BuchMain.QAusleihsatz.fields[n].asstring = ''or (n = BuchMain.QAusleihsatz.fieldcount-1);
    anz12 := n-1;
    TntMemo1.lines.add(' '); TntMemo1.lines.add(' ');

    TntMemo1.lines.add(' ');      // if gef2 then
    TntMemo1.lines.add('NACH-Klasse '+edit3.text+' gefunden.      Sie hat folgende Bücher: ');
    TntMemo1.lines.add(' ');
    n := BuchMain.QAusleihsatz.fieldbyname('TITEL01').FieldNo-1;  // = 3
    repeat
      if BuchMain.QAusleihsatz.fields[n].asstring <> '' then
      begin
        b21[n-2] := BuchMain.QAusleihsatz.fields[n].asstring;
        TntMemo1.Lines.Add(b21[n-2]);
        inc(n);
      end;
    until (BuchMain.QAusleihsatz.fields[n+1].asstring = ''or (n = BuchMain.QAusleihsatz.fieldcount-1);
    anz21 := n-1;

    TntMemo1.lines.add(' ');    //   if gef1 and gef2 then
    TntMemo1.lines.add('Person behält folgende Bücher (in beiden Klassen gleich): ');
    n := 1; anz_nokb := 0; zz := 0;
    repeat
      ok := false; k := 1;
      repeat
        if b12[n] = b21[k] then
        begin
          ok := true;  inc(zz); c[zz] := b12[n]; TntMemo1.lines.add(b12[n]);            //*****
        end
        else inc(k);
      until ok or (k = anz21+1);
      if ok = false then
      begin
        anz_nokb := anz_nokb+1;  bvar1[anz_nokb] := b12[n];
      end;
      inc(n);
    until n = anz12+1;

    TntMemo1.lines.add(' ');
    TntMemo1.lines.add('Person gibt folgende Bücher ab (alte Klasse): ');
    if n > 0 then
    for n := 1 to anz_nokb do TntMemo1.lines.add(bvar1[n]);   //*****

    k := 1; anz_nokg := 0;
    repeat
      ok := false; n := 1;
      repeat
        if b12[n] = b21[k] then  ok := true  else inc(n);
      until ok or (n = anz12+1);
      if ok = false then
      begin
        anz_nokg := anz_nokg+1;  bvar2[anz_nokg] := b21[k];
      end;
      inc(k);
    until k = anz21+1;

    TntMemo1.lines.add(' ');
    TntMemo1.lines.add('Person bekommt folgende Bücher (neue Klasse): ');
    if n > 0 then
    for n := 1 to anz_nokg do TntMemo1.lines.add(bvar2[n]);   //*****
    button13.SetFocus;
  end


Jetzt sind die "Puristen" gefragt, glaube ich. Ich hoffe, das Problem habe ich dargestellt,
sonst bitte nachfragen.
Über eine Lösung würde ich mich wirklich sehr freuen.
Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mi 18.08.10 06:46 
So, manchmal ist es gut, wenn man eine Nacht drüber schläft.
Der Fehler ist in Zeile 38: [n] statt [n+1].
Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas