![]() |
Lazarus Programm haut vor dem Anzeigen der Antwort ab
Warum Endet dieses Programm, bevor es "Notendurchschnitt" ausgegeben hat?
Vielen Dank schonmal im Vorraus program Project2; uses SysUtils,crt; var Punkte: String; A: TStringArray; kPunkte,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,Anzahl,i:byt e; Notendurchschnitt: real; begin writeln('Notendurchschnittsrechner'); writeln('~~~~~~~~~~~~~~~~~~~~~~~~~'); writeln; writeln ('Punkte: '); writeln ('Kursarbeitspunkte: '); gotoxy(22,4);readln(Punkte); gotoxy(22,5);readln(kPunkte); writeln; A :=Punkte.Split(','); x0:=strtoint(A[0]); x1:=strtoint(A[1]); x2:=strtoint(A[2]); x3:=strtoint(A[3]); x4:=strtoint(A[4]); x5:=strtoint(A[5]); x6:=strtoint(A[6]); x7:=strtoint(A[7]); x8:=strtoint(A[8]); x9:=strtoint(A[9]); anzahl := 0; for i := 1 to length(Punkte) do begin if (Punkte[i] = ',') then anzahl := anzahl + 2; end; Notendurchschnitt:=(((x1+x2+x3+x4+x5+x6+x7+x8+x9+x 0)/anzahl)*2+kPunkte)/3; write('Notendurchschnitt: ');write(Notendurchschnitt); readln; end. |
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Hallo,
mal jetzt schnell kPunkte,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,Anzahl,i:byt e; 'byte' zusammen schreiben Notendurchschnitt:=(((x1+x2+x3+x4+x5+x6+x7+x8+x9+x 0)/anzahl)*2+kPunkte)/3; 'x 0' müsste 'x0' sein strtoint konventiert einen String in einen Integer nicht Byte Gruß |
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Setze mal am ersten "begin" einen Breakpoint (mit F5).
Wenn Du dann das Programm startest kann Du mit F8 das Programm zeilenweise durchlaufen (Debuggen). In einer Zeile sollte daher immer nur eine Anweisung stehen, das ist übersichtlicher. Mit dem Mauszeiger über den Variablen kannst Du deren Werte anzeigen lassen und prüfen, ob alles wie erwartet berechnet wird. Wenn z.B. ein String nicht in eine Zahl umgewandelt werden kann, bricht das Programm ab. Das wird vermutlich das Problem sein. PS: Hier im Forum kannst Du Deinen Code formatiert anzeigen lassen (der Helm-Schalter im Editor). Dadurch wird das für alle besser lesbar. |
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Zitat:
Danke, aber das ist es leider nicht, das mit den Leerzeichen war nur komisch rpberkoppiert und wo ich Byte in Integer geändert habe ging es acu nicht. Grüße |
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Ich habe das Problem gefunden. Es besteht darin, das wenn ich weniger als 10 Abtrennungen nehme es abbricht, weil es die anderen nicht gibt... Ich hatte halt gedacht, das wenn ich bis 10 hoch gehe, reicht das als maximale Notenanzahl, weil man ja nicht weis wie viele Noten man hat...
Wisst ihr wie man dies umgeht? |
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Zitat:
|
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Zitat:
|
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Zitat:
|
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
PS: die Leerzeichen in deinem Code kommen vom Forum, welches "zu lange Wörter" trennt, damit das Layout nicht ausversehn/absichtlich zerschossen werden kann.
(damit der Browser z.B. dort Zeilenumbrüche reinschieben kann, falls nötig) Das Problem wäre aber nicht aufgetreten, wenn * dunichunnötigvieleVariablenohneLeerzeichendazsisch enschreibenwürdest (links das Leerzeichen ist nicht von mir) * oder wenn du deinen Code ordentlich formatiert im Forum posten würdest, also mit [DELPHI] ... [/DELPHI] drumrum |
AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
Hallo,
ein anderer Ansatz
Delphi-Quellcode:
program project1;
uses SysUtils, crt, Math; var Punkte: string; A: TStringArray; BB: array of integer; akt_punkt, kPunkte, Anzahl, i: integer; summe, Notendurchschnitt: real; procedure ende; begin writeln('Ungueltige Anzahl Punkte'); readln; end; procedure eingabe(pnkt: integer); begin writeln('Punkt ' + IntToStr(pnkt + 1) + ': '); gotoxy(22, 7 + pnkt); readln(Punkte); bb[pnkt] := StrToInt(Punkte); end; begin akt_punkt := 0; anzahl := 0; writeln('*******************************'); writeln('** Notendurchschnittsrechner **'); writeln('*******************************'); writeln; writeln('Kursarbeitspunkte: '); gotoxy(22, 5); readln(kPunkte); writeln; if (kPunkte < 2) then begin ende; exit; end; try setlength(A, kpunkte); setlength(bb, kPunkte); repeat eingabe(akt_punkt); Inc(akt_punkt); until akt_punkt = kPunkte; anzahl := (length(bb) - 1) * 2; for i := 0 to high(bb) do summe := summe + bb[i]; Notendurchschnitt := ((summe / anzahl) * 2 + kpunkte) / 3; Write('Notendurchschnitt: '); Write(formatfloat('#0.###', Notendurchschnitt)); readln; finally setlength(a, 0); setlength(bb, 0); end; end. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz