Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mit Arrays rechnen (https://www.delphipraxis.net/130261-mit-arrays-rechnen.html)

Mysterio08 5. Mär 2009 15:58


Mit Arrays rechnen
 
Guten Tag,
folgende Situation:
Ich möchte, dass man in ein StringGrid Umsätze von einem ganzen Jahr eingeben kann (Januar, Februar...bis Dezember). Dafür habe ich folgende Zeilen geschrieben:
Delphi-Quellcode:
procedure TForm1.Button_BerechnenClick(Sender: TObject);
var
  Umsatz: Array [1..12] of Single;
begin
  for i := 1 to 12 do
    Umsatz[i] := StrToFloat (StringGrid1.Cells[1,i]);
end
Nun möchte ich, dass der Jahresumsatz errechnet wird. Klar, ich könnte mir das ganze viel einfacher machen und direkt mit den StringGrid-Zellen rechnen, das möchte ich aber nicht.
Wenn ich dann alle Umsätze zugewiesen habe-wie rechne ich dann?
Delphi-Quellcode:
Gesamtumsatz := Umsatz[1] + Umsatz[2]..... + Umsatz[12]
Ich glaube da, würde ich mich dumm und dämlich schreiben, und es soll ja Fälle geben, in denen vielleicht tausende Arrays zusammengerechnet werden, ich habe schon bei Delphi-Treff.de geschaut, aber da habe ich nichts Brauchbares gefunden.
Danke schonmal im Vorraus.
mfg. Mysterio08

jaenicke 5. Mär 2009 16:11

Re: Mit Arrays rechnen
 
Wie wäre es so? ;-)
Delphi-Quellcode:
var
  MySum: Double;
  i: Integer;
begin
  MySum := 0;
  for i := Low(Umsatz) to High(Umsatz) do
    MySum := MySum + Umsatz[i]
// EDIT:
Und mit SetLength und dynamischen Arrays wärst du wohl auch besser bedient.

Mysterio08 5. Mär 2009 16:21

Re: Mit Arrays rechnen
 
Nur ich habe mich weder mit dynamischen Arrays beschäftigt, noch mit SetLength. Ich weiß nur, dass man damit Positionen von Strings herausfinden kann, aber das man das auch zum Rechnen nehmen kann, habe ich nicht gewusst.
Könntest du mir das vielleicht mal so posten, würde mich mal interessieren.

himitsu 5. Mär 2009 16:39

Re: Mit Arrays rechnen
 
Zitat:

Zitat von Mysterio08
Nur ich habe mich weder mit dynamischen Arrays beschäftigt, noch mit SetLength. Ich weiß nur, dass man damit Positionen von Strings herausfinden kann, aber das man das auch zum Rechnen nehmen kann, habe ich nicht gewusst.

mit SetLength kann man die Position eines Strings finden? :shock:
ließ am Besten nochmal in deiner Delphi-Hilfe nach, was das wirklich macht.

Mysterio08 5. Mär 2009 16:46

Re: Mit Arrays rechnen
 
OMG, na klar, du hast Recht. Ich habe SetLength mit Length verwechselt.....
Aber ich habe noch eine andere Möglichkeit - eine wie ich finde eine viel einfachere - gefunden:
Delphi-Quellcode:
  for i := 1 to 12 do
    Gesamtumsatz := Gesamtumsatz + Umsatz[i]
Nur eine Sache ist jetzt noch offen: In meinem StringGrid soll der Nutzer die Umsätze direkt eingeben - die Eigenschaft goEditing in den Options habe ich auf True gesetzt. Nur kann der Nutzer nun auch Zahlen in den prozentualen Anteilen "verfälschen", das gefällt mir gar nicht.
Gibt es die Möglichkeit, nur einzelne Zellen anzusprechen und nicht gleich das ganze StringGrid?

mkinzler 5. Mär 2009 17:39

Re: Mit Arrays rechnen
 
Einfach die Eingabe überwachen.

Mysterio08 5. Mär 2009 17:48

Re: Mit Arrays rechnen
 
Zitat:

Zitat von mkinzler
Einfach die Eingabe überwachen.

Und wie genau kann ich das machen?

mkinzler 5. Mär 2009 17:51

Re: Mit Arrays rechnen
 
Z.B. im KeyDown- oder KeyPress-Event

jaenicke 5. Mär 2009 19:09

Re: Mit Arrays rechnen
 
Zitat:

Zitat von Mysterio08
Aber ich habe noch eine andere Möglichkeit - eine wie ich finde eine viel einfachere - gefunden:
Delphi-Quellcode:
  for i := 1 to 12 do
    Gesamtumsatz := Gesamtumsatz + Umsatz[i]

Genau das habe ich doch geschrieben, um aber nicht bei einer Änderung der Anzahl von Werten im Array überall das 1 to 12 ändern zu müssen, solltest du die saubere Variante benutzen, die ich geschrieben habe. Die schaut ja automatisch wie groß das Array ist, ist also deutlich einfacher.

DeddyH 5. Mär 2009 19:12

Re: Mit Arrays rechnen
 
Oder man nimmt gleich math.Sum() :)

Mysterio08 21. Mär 2009 10:17

Re: Mit Arrays rechnen
 
Zitat:

Zitat von mkinzler
Z.B. im KeyDown- oder KeyPress-Event

Also ich hab das jetzt mal versucht, schaffe es aber nicht. Folgendes habe ich geschrieben:

Delphi-Quellcode:
procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char);
var
  i: Byte;
begin
  for i := 1 to Max do //Max = 12
    begin
      StringGrid.Cells[2,i] := Chr(27) //Chr27 ist die ESC-Tase
    end;
end;
So habe ich es immer bei Edit-Felder gemacht, wenn ich nicht wollte, dass der Nutzer z.B. ein Ergebnis manipulieren kann (ich weiß, ein Label bietet sich zur Ausgabe eher an, aber in der Schule werden wir "gezwungen" ein Edit-Feld zu nehmen).
Jetzt ist das Problem, dass ich in den Felder 1 bis 12 soche Vierecke habe (ich hoffe ihr wisst, was ich damit meine).
Könnt ihr mir einen anderen Lösungsweg nennen, denn ich weiß nicht weiter!

jaenicke 21. Mär 2009 14:30

Re: Mit Arrays rechnen
 
Zitat:

Zitat von Mysterio08
Jetzt ist das Problem, dass ich in den Felder 1 bis 12 soche Vierecke habe (ich hoffe ihr wisst, was ich damit meine).

Du schreibst ja auch das Zeichen Escape, Chr(27) nämlich, in das StringGrid.
Was erwartest du denn anderes als dass das Zeichen dann dort angezeigt wird? Da es kein normales Zeichen ist, sieht man eben nur solch ein Ersatzzeichen. :cyclops:

Namenloser 21. Mär 2009 15:04

Re: Mit Arrays rechnen
 
Zitat:

Zitat von Mysterio08
Zitat:

Zitat von mkinzler
Z.B. im KeyDown- oder KeyPress-Event

Also ich hab das jetzt mal versucht, schaffe es aber nicht. Folgendes habe ich geschrieben:

Delphi-Quellcode:
procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char);
var
  i: Byte;
begin
  for i := 1 to Max do //Max = 12
    begin
      StringGrid.Cells[2,i] := Chr(27) //Chr27 ist die ESC-Tase
    end;
end;
So habe ich es immer bei Edit-Felder gemacht, wenn ich nicht wollte, dass der Nutzer z.B. ein Ergebnis manipulieren kann (ich weiß, ein Label bietet sich zur Ausgabe eher an, aber in der Schule werden wir "gezwungen" ein Edit-Feld zu nehmen).
Jetzt ist das Problem, dass ich in den Felder 1 bis 12 soche Vierecke habe (ich hoffe ihr wisst, was ich damit meine).
Könnt ihr mir einen anderen Lösungsweg nennen, denn ich weiß nicht weiter!

Delphi-Quellcode:
StringGrid.Options := StringGrid.Options - [goEditing]
Oder im Objektinspektor einstellen.

Btw: Bei Edits würde ich nicht unbedingt Chr(27) nehmen, sondern #0.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 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