Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   FreePascal Lazarus Programm haut vor dem Anzeigen der Antwort ab (https://www.delphipraxis.net/209514-lazarus-programm-haut-vor-dem-anzeigen-der-antwort-ab.html)

Wotan1 15. Dez 2021 20:53

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.

mmw 15. Dez 2021 21:44

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ß

stahli 15. Dez 2021 21:49

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.

Wotan1 15. Dez 2021 22:15

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
 
Zitat:

Zitat von mmw (Beitrag 1499185)
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ß



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

Wotan1 15. Dez 2021 22:33

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?

Wotan1 15. Dez 2021 22:34

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
 
Zitat:

Zitat von stahli (Beitrag 1499186)
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.

danke, hat gut gegklappt

Frickler 16. Dez 2021 08:11

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
 
Zitat:

Zitat von Wotan1 (Beitrag 1499189)
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...

Statt x1...x9 ein Array of Byte. Und dann die Länge des Bytearray auf die Länge des Stringarray setzen: SetLength(X, Length(A)); Dann kann auch die Zuweisung in einer Schleife laufen.

Wotan1 16. Dez 2021 12:29

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab
 
Zitat:

Zitat von Frickler (Beitrag 1499201)
Zitat:

Zitat von Wotan1 (Beitrag 1499189)
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...

Statt x1...x9 ein Array of Byte. Und dann die Länge des Bytearray auf die Länge des Stringarray setzen: SetLength(X, Length(A)); Dann kann auch die Zuweisung in einer Schleife laufen.

Danke, ich werde es mal ausprobieren:wink:

himitsu 16. Dez 2021 18:06

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

mmw 16. Dez 2021 19:40

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 11:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz