| Autor |
Beitrag |
Sanne
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 22:25
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:
| var groesse: integer; aktgroesse: integer; scheibe: array of tshape; i: longint; scheibe1,scheibe2,scheibe3,scheibe4,scheibe5,scheibe6,scheibe7,scheibe0: integer ; begin DBcheckbox1.checked:=false; DBcheckbox2.checked:=false; DBcheckbox3.checked:=false; DBcheckbox4.checked:=false; DBcheckbox5.checked:=false; DBcheckbox6.checked:=false; DBcheckbox7.checked:=false; DBcheckbox8.checked:=false;
scheibe7:=128; scheibe6:=64; scheibe5:=32; scheibe4:=16; scheibe3:=8; scheibe2:=4; scheibe1:=2; scheibe0:=1;
groesse:=strtoint(label9.caption);
aktgroesse:=0; i:=7;
begin
repeat aktgroesse:=aktgroesse+scheibe[i]; if groesse<aktgroesse then aktgroesse:=aktgroesse-scheibe[i]; dec[i]; until i<0;
ok:=groesse>aktgroesse; if ok then
case i of 1:DBcheckbox1.checked:=true; 2:DBcheckbox2.checked:=true; 3:DBcheckbox3.checked:=true; 4:DBcheckbox4.checked:=true; 5:DBcheckbox5.checked:=true; 6:DBcheckbox6.checked:=true; 7:DBcheckbox7.checked:=true; 8:DBcheckbox8.checked:=true; end; end; end; |
das ist der quelltext wie ihn mir mein prof gestern gegeben hat- ich denke das hauptproblem liegt an dem blöden dec und den eckigen klammern- kann mir irgendwie nicht vorstellen daß der quelltext einigermaßen funktionieren könnte- aber vielleicht wißt ihr das besser
auf jeden fall werden mir zig fehler angezeigt und ich weiß überhaupt nicht mehr was ich machen soll 
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Mi 18.12.02 22:31
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:
| var groesse: integer; aktgroesse: integer; scheibe: array of tshape; i: longint; scheibe: array[0..7] of integer ; begin DBcheckbox1.checked:=false; DBcheckbox2.checked:=false; DBcheckbox3.checked:=false; DBcheckbox4.checked:=false; DBcheckbox5.checked:=false; DBcheckbox6.checked:=false; DBcheckbox7.checked:=false; DBcheckbox8.checked:=false;
scheibe7:=128; scheibe6:=64; scheibe5:=32; scheibe4:=16; scheibe3:=8; scheibe2:=4; scheibe1:=2; scheibe0:=1;
groesse:=strtoint(label9.caption);
aktgroesse:=0; i:=7;
repeat aktgroesse:=aktgroesse+scheibe[i]; if groesse<aktgroesse then aktgroesse:=aktgroesse-scheibe[i]; dec(i); until i<0;
if groesse>aktgroesse then
case i of 1:DBcheckbox1.checked:=true; 2:DBcheckbox2.checked:=true; 3:DBcheckbox3.checked:=true; 4:DBcheckbox4.checked:=true; 5:DBcheckbox5.checked:=true; 6:DBcheckbox6.checked:=true; 7:DBcheckbox7.checked:=true; 8:DBcheckbox8.checked:=true; end; end; |
Das Gröbste müsste raus sein.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.12.02 22:32
Wie lauten die Fehlermeldungen (mit Zeilenangabe)?. Was soll das Programm machen? Was soll in diesem Code-Abschnitt passieren? Kannst du es irgendwo hochladen mit Sourcen?
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 22:36
ich probiers mal kurz so aus... dann sag ich dir mehr- danke
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 22:39
Also nur mal überflogen.
Folgende Fehler bzw Unsinnigkeiten:
1. Das Begin vor dem repeat brauchst Du nicht. Und dann natürlich auch nicht das dazugehörige end;
2. Der Ausdruck Scheibe[i] ist für den Zugriff auf eine Array-Variable.
Scheibe ist aber kein Array, sondern einzelne Variablen Scheibe1, Scheibe2,...
Vorschlag: Definiere Scheibe als Array.
var Scheibe : Array[0..7] of Integer;
Dann musst Du aber auch die Zuweisungen ändern in Scheibe[1] := 2; usw. Dafür funktioniert dann aber das mit Scheibe[i].
3. Dec[i] muß definitiv mit runden Klammern geschrieben werden.
4. Wird nach verlassen der repeat..until Schleife i immer kleiner 0 sein.
Was also erwartest Du für Werte im case i of?
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 22:40
Quelltext 1:
| scheibe: array[0..7] of integer ; |
Bezeichner redefiniert
sonst müßte es passe- ist der einzige fehler den der noch anzeigt
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 22:45
Hast Du Scheibe schonmal definiert? Vielleicht als Globale Variable?
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Jack Falworth
      
Beiträge: 222
Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
|
Verfasst: Mi 18.12.02 22:45
Die Variablen Scheibe1 bis Scheibe0 löschen und nur das Array stehen lassen, dann klappts.
MfG
Jack Falworth
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 22:50
bin irgendwie total überfragt- hab echt keinen plan- jetzt sieht das ganze so aus:
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:
| var groesse: integer; aktgroesse: integer; i: longint; scheibe: array[0..7] of integer ; ok: integer; begin DBcheckbox1.checked:=false; DBcheckbox2.checked:=false; DBcheckbox3.checked:=false; DBcheckbox4.checked:=false; DBcheckbox5.checked:=false; DBcheckbox6.checked:=false; DBcheckbox7.checked:=false; DBcheckbox8.checked:=false;
scheibe[7]:=128; scheibe[6]:=64; scheibe[5]:=32; scheibe[4]:=16; scheibe[3]:=8; scheibe[2]:=4; scheibe[1]:=2; scheibe[0]:=1;
groesse:=strtoint(label9.caption);
aktgroesse:=0; i:=7;
repeat aktgroesse:=aktgroesse+scheibe[i]; if groesse<aktgroesse then aktgroesse:=aktgroesse-scheibe[i]; dec(i); until i<0;
ok:=groesse>aktgroesse; if ok then case i of 1:DBcheckbox1.checked:=true; 2:DBcheckbox2.checked:=true; 3:DBcheckbox3.checked:=true; 4:DBcheckbox4.checked:=true; 5:DBcheckbox5.checked:=true; 6:DBcheckbox6.checked:=true; 7:DBcheckbox7.checked:=true; 8:DBcheckbox8.checked:=true; end; end; |
hab noch das mit dem ok reingebracht....
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.12.02 22:52
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 22:52
und jetzt geht gar nichts mehr- er meckert beim ok das integer und boolean nicht zusammenpassen- daß der ausdruck boolean sein muß...
ich mag nimmer 
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 22:54
muß ich denn beides schrieben oder kann ich einfach das
scheibe: array of tshape;
löschen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.12.02 22:57
Zuletzt bearbeitet von Luckie am Mi 18.12.02 23:01, insgesamt 1-mal bearbeitet
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 23:00
Also zumindest innerhalb des geposteten Qodes benützt Du das Scheibe nicht als TShape.
Somit können wir nur raten.
Aber dann nenne doch das Scheibenarray für den Integer einfach um in Scheibengroesse : Array[0..7] of integer;
Du darfst eben jeden Variablennamen nur einmal verwenden.
Klar, sonst weis er ja nicht, ob Du nun das Schape oder die Zahl willst...
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 23:01
ist dann ok boolean und nicht integer oder was? jetzt blick ich gar nichts mehr
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 23:03
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 23:06
aber jetzt hab ich noch folgendes problem
die checkboxes machen nichts.... bei jedem i bei dem groesse>aktgroesse ist sollte die dazugehörige checkbox aktiviert werden.... macht´s aber nicht 
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 23:06
Bleibt nur noch die rage was Du in der case abfrage abfragen willst.
i wird zu diesem Zeitpunkt wohl immer kleiner 0 sein. Also niemals zwischen 1 und 8...
Was hast denn damit vor? Irgendeinen Zusand visualisieren?
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Sanne 
      
Beiträge: 30
|
Verfasst: Mi 18.12.02 23:11
ja genau das.... er soll anzeigen welche scheiben er in der rechnung verwendet hat- die für groesse>aktgroesse gelten
also zb. scheibe1, scheibe 3, scheibe 4 und scheibe 7- dann soll dementsprechend die checkbox 1, 3, 4 und 7 aktiviert werden
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 23:14
Dann musst Du die Checkboxen innerhalb der Schleife setzen.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| repeat aktgroesse:=aktgroesse+scheibe[i]; TDBcheckbox(FindComponent('DBcheckbox' + IntToStr(i))).checked := true; if groesse<aktgroesse then begin aktgroesse:=aktgroesse-scheibe[i]; TDBcheckbox(FindComponent('DBcheckbox' + IntToStr(i))).checked := false; end; dec(i); until i<0; |
Ist aber auf die schnelle ungetestet.
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|