AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen FreePascal Lazarus Programm haut vor dem Anzeigen der Antwort ab
Thema durchsuchen
Ansicht
Themen-Optionen

Lazarus Programm haut vor dem Anzeigen der Antwort ab

Ein Thema von Wotan1 · begonnen am 15. Dez 2021 · letzter Beitrag vom 16. Dez 2021
Antwort Antwort
Wotan1

Registriert seit: 15. Dez 2021
5 Beiträge
 
#1

Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 15. Dez 2021, 21:53
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.

Geändert von Wotan1 (15. Dez 2021 um 22:26 Uhr)
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
337 Beiträge
 
Delphi 12 Athens
 
#2

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 15. Dez 2021, 22:44
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ß
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 15. Dez 2021, 22:49
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Wotan1

Registriert seit: 15. Dez 2021
5 Beiträge
 
#4

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 15. Dez 2021, 23:15
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
  Mit Zitat antworten Zitat
Wotan1

Registriert seit: 15. Dez 2021
5 Beiträge
 
#5

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 15. Dez 2021, 23:33
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?

Geändert von Wotan1 (15. Dez 2021 um 23:36 Uhr)
  Mit Zitat antworten Zitat
Wotan1

Registriert seit: 15. Dez 2021
5 Beiträge
 
#6

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 15. Dez 2021, 23:34
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
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
589 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 16. Dez 2021, 09:11
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.
  Mit Zitat antworten Zitat
Wotan1

Registriert seit: 15. Dez 2021
5 Beiträge
 
#8

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 16. Dez 2021, 13:29
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#9

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 16. Dez 2021, 19:06
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Dez 2021 um 19:11 Uhr)
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
337 Beiträge
 
Delphi 12 Athens
 
#10

AW: Lazarus Programm haut vor dem Anzeigen der Antwort ab

  Alt 16. Dez 2021, 20:40
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ß

Geändert von mmw (16. Dez 2021 um 21:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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