![]() |
Mittelwert von Myarray
Hallöchen
Ich muss in unserem momentanem Info Projekt per Buttonklick den Mittelwert der Zufallszeilen des Myarray berechnen. ENimal soll das ganze Zeilenweise (aus einem 2 Dimensionalem Array) und einmal aus dem kompletten Array auf Buttonklick erfolgen. ;) Nur irgendwie komm ich ums verrecken nicht dahinter was ich machen soll. :gruebel: |
Re: Mittelwert von Myarray
Hallo
Überleg dir mal, was der Mittelwert bedeutet, wie du ihn von einer Menge Zahlen berechnen kannst. Danach kommt die Delphi Umsetzung. (Tipp: For..To verwenden) |
Re: Mittelwert von Myarray
Na ja ich berechne ihn in dem ich die Zahlen der Zeile addiere und durch die Anzahl der Zahlen teile. Die einzelnen Zahlen sind Integers das Ergebnis Real. Ich weiß nur nicht wie ich mit For .. To auf Myarray zugreifen kann ;)
|
Re: Mittelwert von Myarray
Myarray[0] gibt den Wert des 1. Elements zurück (falls Myarray bei 0 beginnt)
Low(Myarray) gibt den Index des 1. Elements von Myarray zurück High(Myarray) gibt den Index des letzten Elements von Myarray zurück D.h du kannst in einer Schleife von Low(Myarray) bis High(Myarray) die Werte durchlaufen und addieren und danach den Mittelwert bestimmen. |
Re: Mittelwert von Myarray
irgendwie bringt mich das auch nicht direkt weiter :gruebel:
|
Re: Mittelwert von Myarray
Welche Typ hat der Array?
|
Re: Mittelwert von Myarray
integer :D irgendwie hab ich einfach nur ne totale Denkblockade
so siehts bis jetzt aus procedure TForm1.Button6Click(Sender: TObject); var summe:integer; mitte:real; i: integer; begin edit2.Visible:=true; for i := Low(Myarray) to High(Myarray) do summe := Integer + Myarray[i]; mitte := summe / 4; end; edit2.Text:= inttostr(summe); end; |
Re: Mittelwert von Myarray
Zitat:
|
Re: Mittelwert von Myarray
Die Zeile
Delphi-Quellcode:
ist fehlerhaft.
summe := Integer + Myarray[i];
Sollte
Delphi-Quellcode:
heissen.
summe := summe + Myarray[i];
Zudem sollte die summe initialisiert werden. D.h vor der Schleife auf 0 gesetzt werden. |
Re: Mittelwert von Myarray
procedure TForm1.Button6Click(Sender: TObject);
var i,summe:integer; mitte:real; begin edit2.Visible:=true; summe := 0; for i := Low(Myarray) to High(Myarray) do summe := Summe + Myarray[i]; mitte := summe / 4; summe := summe + Myarray[i]; end; edit2.Text:= inttostr(summe); end; Dann heisst es allerdings bei summe := summe + Myarray[i]; Inkompatible Datentypen |
Re: Mittelwert von Myarray
Bist du sicher, das sich wirklich Integer-Werte im Array befinden?
|
Re: Mittelwert von Myarray
unit uZufall;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TMyarray = Array [1..2,1..5] Of Integer; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Edit3: TEdit; StringGrid1: TStringGrid; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; procedure FormCreate(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; MyArray: TMyarray; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Button1.Caption := 'neu'; Button2.Caption := 'memo'; Button3.Caption := 'grid'; Button4.Caption := 'edit'; Button5.Caption := 'MWZeile'; Button6.Caption := 'MWKomplett'; Button7.Caption := 'close'; StringGrid1.ColCount := 4; StringGrid1.RowCount := 2; Memo1.Clear; Edit1.Visible := false; Edit2.Visible := false; Edit3.Visible := false; Edit4.Visible := false; Stringgrid1.Visible :=false; Memo1.Visible := false; end; procedure fuellen; var z,sp:integer; begin randomize; for z:=1 to 4 do for sp:=1 to high(Myarray)do myarray[sp,z]:=random(101) end; procedure TForm1.Button1Click(Sender: TObject); begin fuellen; end; procedure TForm1.Button2Click(Sender: TObject); var a1,a2 : string; sp : integer; begin memo1.Visible := true; a1 := ''; for sp:=1 to 4 do a1 := a1+ ' '+inttostr(myarray[1,sp]); memo1.lines.add (a1); a2 := ''; for sp:=1 to 4 do a2 := a2+ ' '+inttostr(myarray[2,sp]); memo1.lines.add (a2); end; procedure TForm1.Button3Click(Sender: TObject); var row,col : integer; begin stringgrid1.Visible:= true; for row:= 0 to 2 do for col:= 0 to 4 do stringgrid1.cells[col,row]:=inttostr(myarray[row+1,col+1]) end; procedure TForm1.Button4Click(Sender: Tobject); var a1,a2 : string; sp : integer; begin edit3.Visible:=true; Edit1.Visible:= true; a1 := ''; for sp:=1 to 4 do a1 := a1+ ' '+inttostr(myarray[1,sp]); edit3.text := a1; a2:= ''; for sp:=1 to 4 do a2 := a2+ ' '+inttostr(myarray[2,sp]); edit1.text := a2; end; procedure TForm1.Button7Click(Sender: TObject); begin close end; procedure TForm1.Button6Click(Sender: TObject); var i,summe:integer; mitte:real; begin edit2.Visible:=true; summe := 0; for i := Low(Myarray) to High(Myarray) do summe := Summe + Myarray[i]; mitte := summe / 4; end; edit2.Text:= inttostr(summe); end. |
Re: Mittelwert von Myarray
Das ist ja auch ein 2-dimensionales Array.
|
Re: Mittelwert von Myarray
Myarray[i] ist das ein Array of Integer.
|
Re: Mittelwert von Myarray
o__O hatte ich vergessen zu erwähnen :oops:
Es handelt sich auch um Delphi 6 |
Re: Mittelwert von Myarray
@Markus:
Zitat:
|
Re: Mittelwert von Myarray
Delphi-Quellcode:
for i := Low(Myarray) to High(Myarray) do
for j := Low( MyArray[i] to High( MyArray[i]) do Summe := Summe + MyArray[i,j]; |
Re: Mittelwert von Myarray
Code:
Jetz gehts schon besser aber irgendwie bekomme ich die Fehlermeldung "[Hinweis] uZufall.pas(133): Auf 'summe' zugewiesener Wert wird niemals benutzt" und "[Hinweis] uZufall.pas(130): Variable 'mitte' wurde deklariert, aber in 'TForm1.Button6Click' nicht verwendet"
procedure TForm1.Button6Click(Sender: TObject);
var i,j,summe:integer; mitte:real; begin edit2.Visible:=true; summe := 0; for i := Low(Myarray) to High(Myarray) do for j := Low( MyArray[i]) to High( MyArray[i]) do Summe := Summe + MyArray[i,j]; end; mitte:= Summe/4; edit2.Text:= inttostr(mitte); end; |
Re: Mittelwert von Myarray
Delphi-Quellcode:
for i := Low(Myarray) to High(Myarray) do
for j := Low( MyArray[i]) to High( MyArray[i]) do begin Summe := Summe + MyArray[i,j]; inc( anzahl); end; mitte:= Summe/ anzahl; edit2.Text:= inttostr(mitte); |
Re: Mittelwert von Myarray
edit: hab das Problem gelöst :D
danke für ale die zeit geopfert haben um mir zu helfen ;) |
Re: Mittelwert von Myarray
edit2.Text:= inttostr(mitte.mtrID);
|
Re: Mittelwert von Myarray
Warum schreibst du
Delphi-Quellcode:
?
mitte.mtrID
mitte genügt :-D PS: Verwende doch Delphi-Code Tags :thumb: |
Re: Mittelwert von Myarray
muss nochmal kurz :(
irgendwie berechnet der den Mittelwert falsch :gruebel: der berechnet den doch für das 2d Array oder? :gruebel: |
Re: Mittelwert von Myarray
Zitat:
1 For-Schleife -> 1d Array |
Re: Mittelwert von Myarray
ja aber das ändert nichts an der Tatsache das er den Mittelwert falsch berechnet.
So siehts jetzt aus
Code:
Ich steh hier kurz vorm Lappi durchs Zimmer schmeissen weil mich der Mittelwert schon über 6 Stunden gekostet hat :wall:
unit uZufall;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TMyarray = Array [1..2,1..4] Of Integer; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Edit3: TEdit; StringGrid1: TStringGrid; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; procedure FormCreate(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; MyArray: TMyarray; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Button1.Caption := 'neu'; Button2.Caption := 'memo'; Button3.Caption := 'grid'; Button4.Caption := 'edit'; Button5.Caption := 'MWZeile'; Button6.Caption := 'MWKomplett'; Button7.Caption := 'close'; StringGrid1.ColCount := 4; StringGrid1.RowCount := 2; Memo1.Clear; Edit1.Visible := false; Edit2.Visible := false; Edit3.Visible := false; Edit4.Visible := false; Stringgrid1.Visible :=false; Memo1.Visible := false; end; procedure fuellen; var z,sp:integer; begin randomize; for z:=1 to 4 do for sp:=1 to high(Myarray)do myarray[sp,z]:=random(101) end; procedure TForm1.Button1Click(Sender: TObject); begin fuellen; end; procedure TForm1.Button2Click(Sender: TObject); var a1,a2 : string; sp : integer; begin memo1.Visible := true; a1 := ''; for sp:=1 to 4 do a1 := a1+ ' '+inttostr(myarray[1,sp]); memo1.lines.add (a1); a2 := ''; for sp:=1 to 4 do a2 := a2+ ' '+inttostr(myarray[2,sp]); memo1.lines.add (a2); end; procedure TForm1.Button3Click(Sender: TObject); var row,col : integer; begin stringgrid1.Visible:= true; for row:= 0 to 2 do for col:= 0 to 4 do stringgrid1.cells[col,row]:=inttostr(myarray[row+1,col+1]) end; procedure TForm1.Button4Click(Sender: Tobject); var a1,a2 : string; sp : integer; begin edit3.Visible:=true; Edit1.Visible:= true; a1 := ''; for sp:=1 to 4 do a1 := a1+ ' '+inttostr(myarray[1,sp]); edit3.text := a1; a2:= ''; for sp:=1 to 4 do a2 := a2+ ' '+inttostr(myarray[2,sp]); edit1.text := a2; end; procedure TForm1.Button6Click(Sender: TObject); var i,j,summe,anzahl :integer; mitte:real; begin edit2.Visible:=true; summe := 0; for i := Low(Myarray) to High(Myarray) do for j := Low(MyArray[i]) to High(MyArray[i]) do begin Summe := Summe + MyArray[i,j]; inc(anzahl); end; mitte:= Summe/ anzahl; edit2.Text:= floattostr(mitte); end; procedure TForm1.Button7Click(Sender: TObject); begin close end; end. |
Re: Mittelwert von Myarray
Zitat:
Hm, 6h, musst du morgen wohl abgeben das ganze was? :roll: |
Re: Mittelwert von Myarray
nich direkt aber ich sitz jetz einmal dabei und will das jetz fertig machen :stupid: habt ihr noch ne Idee? ;)
|
Re: Mittelwert von Myarray
Zitat:
|
Re: Mittelwert von Myarray
Hatte vorhin zum Beispiel bei den Zufallszahlen
71 + 28 + 84 + 42 + 29 + 75 + 15 + 54 einen Mittelwert von 9,10890 :gruebel: |
Re: Mittelwert von Myarray
Und was machen die Buttons und so???
Dein Code ist Null formatiert und null kommentiert. Macht wenig Freude zu helfen (meiner Meinung nach)! //Edit: Hier mal der Code richtig formatiert:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TMyArray = Array [1..2,1..4] Of Integer; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Edit3: TEdit; StringGrid1: TStringGrid; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Button5: TButton; Button6: TButton; Button7: TButton; Memo1: TMemo; procedure Button7Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; MyArray: TMyarray; implementation {$R *.dfm} procedure Fuellen; var Z, SP: Integer; begin Randomize; for Z := 1 to 4 do for SP := 1 to High(MyArray)do MyArray[SP, Z] := Random(101) end; procedure TForm1.Button1Click(Sender: TObject); begin Fuellen; end; procedure TForm1.Button2Click(Sender: TObject); var A1, A2: String; SP: Integer; begin Memo1.Visible := True; A1 := ''; for SP := 1 to 4 do A1 := A1 + ' ' + IntToStr(MyArray[1, SP]); Memo1.Lines.Add(A1); A2 := ''; for SP := 1 to 4 do A2 := A2 + ' ' + IntToStr(MyArray[2, SP]); Memo1.Lines.Add (A2); end; procedure TForm1.Button3Click(Sender: TObject); var Row, Col: Integer; begin StringGrid1.Visible := True; for Row := 0 to 2 do for Col := 0 to 4 do StringGrid1.Cells[Col, Row] := IntToStr(MyArray[ Row + 1, Col + 1]) end; procedure TForm1.Button4Click(Sender: Tobject); var A1, A2 : String; SP : Integer; begin Edit3.Visible := True; Edit1.Visible := True; A1 := ''; for SP := 1 to 4 do A1 := A1 + ' ' + IntToStr(MyArray[1, SP]); Edit3.Text := A1; A2 := ''; for SP := 1 to 4 do A2 := A2 + ' ' + IntToStr(MyArray[2, SP]); Edit1.Text := A2; end; procedure TForm1.Button6Click(Sender: TObject); var I,J, Summe, Anzahl: Integer; Mitte: Real; begin Edit2.Visible := True; Summe := 0; for I := Low(Myarray) to High(Myarray) do for J := Low(MyArray[i]) to High(MyArray[i]) do begin Summe := Summe + MyArray[I, J]; Inc(Anzahl); end; Mitte := Summe / Anzahl; Edit2.Text := FloatToStr(Mitte); end; procedure TForm1.Button7Click(Sender: TObject); begin Close; end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.Caption := 'neu'; Button2.Caption := 'memo'; Button3.Caption := 'grid'; Button4.Caption := 'edit'; Button5.Caption := 'MWZeile'; Button6.Caption := 'MWKomplett'; Button7.Caption := 'close'; StringGrid1.ColCount := 4; StringGrid1.RowCount := 2; Memo1.Clear; Edit1.Visible := False; Edit2.Visible := False; Edit3.Visible := False; Edit4.Visible := False; Stringgrid1.Visible := False; Memo1.Visible := False; end; end. |
Re: Mittelwert von Myarray
Habs mal mit Comments versehen
Code:
unit uZufall;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TMyarray = Array [1..2,1..4] Of Integer; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Edit3: TEdit; StringGrid1: TStringGrid; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; procedure FormCreate(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; MyArray: TMyarray; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Button1.Caption := 'neu'; Button2.Caption := 'memo'; Button3.Caption := 'grid'; Button4.Caption := 'edit'; Button5.Caption := 'MWZeile'; Button6.Caption := 'MWKomplett'; Button7.Caption := 'close'; StringGrid1.ColCount := 4; StringGrid1.RowCount := 2; Memo1.Clear; Edit1.Visible := false; Edit2.Visible := false; Edit3.Visible := false; Edit4.Visible := false; Stringgrid1.Visible :=false; Memo1.Visible := false; end; procedure fuellen; var z,sp:integer; begin randomize; for z:=1 to 4 do for sp:=1 to high(Myarray)do myarray[sp,z]:=random(101) end; procedure TForm1.Button1Click(Sender: TObject); //fuellt ein Array mit Zufallszahlen begin fuellen; end; procedure TForm1.Button2Click(Sender: TObject); //schreibt den Inhalt des Arrays in ein memo var a1,a2 : string; sp : integer; begin memo1.Visible := true; a1 := ''; for sp:=1 to 4 do a1 := a1+ ' '+inttostr(myarray[1,sp]); memo1.lines.add (a1); a2 := ''; for sp:=1 to 4 do a2 := a2+ ' '+inttostr(myarray[2,sp]); memo1.lines.add (a2); end; procedure TForm1.Button3Click(Sender: TObject); //schreibt den Inhalt des Arrays in ein Stringgrid var row,col : integer; begin stringgrid1.Visible:= true; for row:= 0 to 2 do for col:= 0 to 4 do stringgrid1.cells[col,row]:=inttostr(myarray[row+1,col+1]) end; procedure TForm1.Button4Click(Sender: Tobject); //schreibt den Inhalt des Skripts in Edit 1 + 3 var a1,a2 : string; sp : integer; begin edit3.Visible:=true; Edit1.Visible:= true; a1 := ''; for sp:=1 to 4 do a1 := a1+ ' '+inttostr(myarray[1,sp]); edit3.text := a1; a2:= ''; for sp:=1 to 4 do a2 := a2+ ' '+inttostr(myarray[2,sp]); edit1.text := a2; end; procedure TForm1.Button6Click(Sender: TObject); //soll den Mittelwert des Arrays in Edit 2 ausgeben var i,j,summe,anzahl :integer; mitte:real; begin edit2.Visible:=true; summe := 0; for i := Low(Myarray) to High(Myarray) do for j := Low(MyArray[i]) to High(MyArray[i]) do begin Summe := Summe + MyArray[i,j]; inc(anzahl); end; mitte:= Summe/ anzahl; edit2.Text:= floattostr(mitte); end; procedure TForm1.Button7Click(Sender: TObject); //beendet das Programm begin close end; end. |
Re: Mittelwert von Myarray
Ich bin mal so frei und formatier dir das ganze mal etwas. Dann kann man es viel besser lesen :zwinker:
Außerdem hast du die Variable Anzahl nicht mit 0 initialisiert. Somit ist der Anfangswert von Anzahl nicht vorherzusehen - halt gerade das, was im Speicher steht - und dass kann alles mögliche sein. Daher: Variablen initialisieren, so wie du es bei Summe gemacht hast.
Delphi-Quellcode:
PS: zwar ist der Ansatz der Kommentare schon mal nicht all zu schlecht, jedoch wird man aus denen nicht viel schlaucher. Unterteile deinen Quelltext in Blöcke und kommentiere jeden Block, was er bewirken soll.
procedure TForm1.Button6Click(Sender: TObject);
var i, j : integer; // Schleifenvariablen Summe, Anzahl : integer; Mitte : real; // der fertige Mittelwert begin // Initialisierung Summe := 0; // das hattest du Anzahl := 0; // das ABER NICHT <---------------- Edit2.Visible := True; // Summe & Anzahl berechnen for i := Low(MyArray) to High(MyArray) do for j := Low(MyArray[i]) to High(MyArray[i]) do begin Summe := Summe + MyArray[i, j]; inc(Anzahl); end; // Mittelwert berechnen Mitte := Summe / Anzahl; // Ergebnis ausgeben Edit2.Text := FloatToStr(Mitte); end; |
Re: Mittelwert von Myarray
Und warum macht ihr net einfach an meinem formatierten Quellcode weiter? :gruebel: :gruebel: :gruebel:
|
Re: Mittelwert von Myarray
Weil da auch schon der Fehler drinnen war :P
Ne, kleiner Scherz: hab ich nicht gesehen, sorry :oops: |
Re: Mittelwert von Myarray
Zitat:
|
Re: Mittelwert von Myarray
*Asche übers Haupt schütt*
Jetz muss ich nur noch rauskriegen wie ich den Mittelwert für einzelne Zellen des Arrays berechnen kann :angel2: |
Re: Mittelwert von Myarray
Entweder Vertikal durchs Array oder Horizontal durch und dann gleiches Spiel: Addieren dann Teilen!
|
Re: Mittelwert von Myarray
und wie geh ich vertikal durchs array? :gruebel: ;)
|
Re: Mittelwert von Myarray
Hallo,
Delphi-Quellcode:
die Summe nicht durch 4 dividieren, sondern durch: High(Myarray)-Low(Myarray). Aber vergiss die Klammer um diesen Ausdruck nicht.
i := Low(Myarray) to High(Myarray) do
summe := Summe + Myarray[i]; mitte := summe / 4; Noch ne Bemerkung: Jetzt haben wir dir alles gelöst ohne dass du nachdenken musstest. Ist das nicht schön? Grüsse Rainer |
Re: Mittelwert von Myarray
irgendwie komm ich mir grad total blöd vor, weil ich nichts selber gemacht hab. Aber irgendwie hab ich das einfach nicht hinbekommen (trotz mehr als 8 Stunden die ich davor gesessen hab). Den irgendwie hatten wir das im Informatik Unterricht noch nie behandelt und haben Arrays selbst auch nur 10 Minuten behandelt. ;)
In dem Zugedanke an alle die mir geholfen haben und jetz weiß ich wenigstens für die folgenden Male wie das ganze funktioniert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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 by Thomas Breitkreuz