![]() |
Notendurchschnitt berechnen und Initialisierung eines Array of integer
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich wollte eigentlich eine ganz einfache Notendurchschnittsberechnung mit einem Array of integer programmieren, doch ich bekomme es einfach nicht hin. An der Stelle der ersten Summenbildung ist das ArrayNoten[i] vermutlich nicht initialisiert und gibt daher irgendwelche Zufallszahlen aus und verfälscht damit das Ergebnis. Wie kann ich das ArrayNoten[i] initialisieren oder liegt der Fehler ganz wo anders? Beim Suchen nach Initialisierung von Array of integer fand ich folgende Lösung: FillChar(ArrayNoten, SizeOf(ArrayNoten), 0); Aber wo muss ich diese Initialisierung in mein Programm einbauen, damit es funktioniert? So wie es jetzt ist geht es nicht. Das vollständige Programm liegt bei.
Delphi-Quellcode:
procedure TForm1.btn3Click(Sender: TObject);
var i, sum, anz : Integer; Durchschnitt : Extended; ArrayNoten: array[1..6] of Int32; begin sum:=0; Durchschnitt:=0; anz:=0; //FillChar(ArrayNoten, SizeOf(ArrayNoten), 0); //Initialisierung Array for i := 0 to length(ArrayNoten) - 1 do //for I := (Low(ArrayNoten)) to (High(ArrayNoten))-1 do begin ArrayNoten[1]:=(strtoint(edt1.text)); //1 ArrayNoten[2]:=(strtoint(edt2.text)); //2 ArrayNoten[3]:=(strtoint(edt3.text)); //4 ArrayNoten[4]:=(strtoint(edt4.text)); //1 ArrayNoten[5]:=(strtoint(edt5.text)); //1 ArrayNoten[6]:=(strtoint(edt6.text)); //1 sum:= sum + ArrayNoten[i]; end; anz:=SumInt(ArrayNoten); Durchschnitt:= sum / anz; lblDurchsch.Caption:=floattostr(Durchschnitt); end; |
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
hallo,
hilft das hier System.Math.Mean gruß |
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Schau dir mal deine Schleife an, die macht ja keinen Sinn, denn du benutzt nirgendwo die Schleifenvariable i. Du berechnest in der Schleife sum usw... Die werden ja immer größer. und und und
|
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Zitat:
|
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Wozu brauchst du überhaupt ein Array? Auf dem Tablet getippt, daher rudimentär + ungetestet:
Delphi-Quellcode:
Und falls es doch mit einem Array sein soll:
For i := 1 to 6 do
Inc(sum,StrToInt(FindComponent('edt' + i.ToString).Text); Durchschnitt := sum / 6;
Delphi-Quellcode:
Besser ist
For i := Low(Notenarray) to High(Notenarray) do
Notenarray[i] := StrToInt(FindComponent('edt' + i.ToString).Text); For i := 1 to 6 do Inc(sum,Notenarray[i]);
Delphi-Quellcode:
, weil FindComponent darauf angewiesen ist.
1 to 6
|
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Danke #dummzeuch.
Ich habe Deine Hinweise berücksichtigt und selbst noch einen weiteren Fehler gefunden. Jetzt rechnet er den Notendurchschnitt exakt aus. Ich habe die Schleife dahin verändert:
Delphi-Quellcode:
also -1 weggelassen.
for i := 0 to length(ArrayNoten) do
Auch den anderen vielen Dank für Eure Mühe. |
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Aus Interesse: Wozu brauchst du das Array?
|
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
eigentlich brauche ich das array nicht. Es war lediglich eine mir selbst gestellte Aufgabe, die ich nur sehr schwerfällig lösen konnte.:oops:
Anders geht es natürlich auch und möglicherweise viel besser. |
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Zitat:
Wenn Du bei length(ArrayNoten) die -1 weglassen willst, dann solltest Du besser Low(ArrayNoten) to High(ArrayNoten) schreiben. Ohne -1 gibt es jetzt einen Überlauf 0,1,2,3,4,5,6 sind nämlich 7 Array-Zugriffe, und keine 6. |
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Danke #Rollo62: habe es auf Deinen Vorschlag hin geändert.
|
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Zitat:
Korrekt ist
Delphi-Quellcode:
for i := 1 to 6 do
Denn der Index des Arrays ist ja als 1 bis 6 deklariert und nicht 0 bis 5 oder 0 bis 6:
Delphi-Quellcode:
oder, wie Rollo62 schon schrieb:
var
ArrayNoten: array[1..6] of Int32;
Delphi-Quellcode:
for i := Low(ArrayNoten) to High(ArrayNoten) do
Dann setzt der Compiler die korrekten Werte automatisch ein. Das Length(Array)-1 braucht man nur dann, wenn man das Array dynamisch alloziert, denn dann beginnt der Index immer bei 0, das letzte Element ist also bei Length(Array)-1:
Delphi-Quellcode:
Auch in diesem Fall funktioniert Low und High.
var
ArrayNoten: array of Int32; begin SetLength(ArrayNoten, 6); for i := 0 to Length(ArrayNoten)-1 do Tipp: Es empfiehlt sich bei den Compiler-Optionen im Debug-Modus Overflow Checking und Range Checking zu aktivieren. Dann hätte es nämlich einen Laufzeitfehler gegeben, weil Du auf einen ungültigen Array-Index zugreifst. |
AW: Notendurchschnitt berechnen und Initialisierung eines Array of integer
Zitat:
Delphi-Quellcode:
ArrayNoten: array[1..6] of Int32;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 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