Entwickler-Ecke
Sonstiges (Delphi) - ganz viele fehler im quelltext
Sanne - Mi 18.12.02 22:25
Titel: ganz viele fehler im quelltext
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:
| 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 - Mi 18.12.02 22:31
Titel: Re: ganz viele fehler im quelltext
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:
| 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.
Delete - 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 - Mi 18.12.02 22:36
ich probiers mal kurz so aus... dann sag ich dir mehr- danke
Wolff68 - 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?
Sanne - 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 - Mi 18.12.02 22:45
Hast Du Scheibe schonmal definiert? Vielleicht als Globale Variable?
Jack Falworth - 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 - Mi 18.12.02 22:50
bin irgendwie total überfragt- hab echt keinen plan- jetzt sieht das ganze so aus:
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:
| 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....
Delete - Mi 18.12.02 22:52
Quelltext
1:
| scheibe: array of TShape; |
Da hat sie die Scheiben schon mal deklariert.
Vorschlag:
Quelltext
1: 2:
| shScheibe: array of TShape; intScheibe: array[0..6] of Integer; |
Sanne - 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 - Mi 18.12.02 22:54
muß ich denn beides schrieben oder kann ich einfach das
scheibe: array of tshape;
löschen?
Delete - Mi 18.12.02 22:57
Quelltext
1: 2:
| ok:=groesse>aktgroesse; if ok then |
OK ist ein Integer, du machst ja auch einen Vergleich, der so in Ordnung ist, nur eine if-Abfrage kann nur wahr/falsch sein. Und wenn OK den Wert 10 hat, wie soll denn dann if entscheiden ob es wahr oder falsch ist?
Folgendes geht dann natürlich wieder:
Sollte es tun. Oder je nach dem was passieren soll, könnte ich mir auch das vorstellen:
Quelltext
1:
| if groesse > aktgroesse then |
Wolff68 - 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...
Sanne - Mi 18.12.02 23:01
ist dann ok boolean und nicht integer oder was? jetzt blick ich gar nichts mehr
Sanne - Mi 18.12.02 23:03
jetzt klappts...
Sanne - 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 - 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?
Sanne - 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 - 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.
Sanne - Mi 18.12.02 23:28
seh ich das richtig daß ich nur 2 zeilen einsetzten muß- oder?
also dann zeigt er "zugriffsverletzung......blablabla" an....
... warum kann das nicht einfach klappen? :(
Wolff68 - Mi 18.12.02 23:40
Also normalerweise ist das mit eben diesen 2 Zeilen getan. Den Case-Block brauchst nicht.
Wie gesagt war das ungetestet. Vielleicht hab ich mich auch irgendwo verschrieben. Um es selber zu testen müsste ich schon die ganze prozedur in ein eigenes Form packen, die Checkboxen drauf usw.
Ich werd jetzt aber für Heute schlußmachen. Muß morgen um halb 5 raus. :(
Vielleicht ist noch jemand da, der das klärt.
Viel Glück noch.
Sanne - Mi 18.12.02 23:43
danke trotzdem hast mir wahnsinnig geholfen- echt!
schlaf gut
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!