Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Frage zur StringGrid (https://www.delphipraxis.net/171077-frage-zur-stringgrid.html)

Vidar92 18. Okt 2012 21:57

Frage zur StringGrid
 
Hey Leute, ich habe folgendes Problem.

Ich habe nach langer Zeit wieder mit dem Programmieren angefangen und nun hab ich ein kleines Problemchen mit der StringGrid.
Ich will in einer bestimmten Zelle (meinetwegen 4,6 als Beispiel) etwas berechnen lassen.
Die Formel für diese Berechnung lautet:
30*Stufe*1,1^Stufe

Nun ist es so, das diese "Stufe" eine Zelle der StringGrid sein soll (Beispiel 1,1). Wie realisiere ich nun, das die Zelle 4,6 nach der Formel 30*StringGrid.cells[1,1]*1.1^StringGrid[1,1] rechnet?!

Ich weiß man kann auch für die Potenz die Math Unit beim Interface reinschreiben und es dann mit dem Befehl Power(1.1,StringGrid[1,1] irgendwie realisieren, doch ich komme nicht drauf.
Ich hatte es schonmal hinbekommen vor 2 oder 3 Jahren, aber nun sitze ich seit 1 Woche ohne Lösung.

Vllt könntet Ihr mir helfen?
Momentan sieht es bei mir so aus:
StringGrid1.Cells[4,1]:=FloatToStr(StrToFloat(StringGrid1.Cells[1,1])*30)*StrToFloat(Power(1.1,StringGrid1.Cells[1,1]));

Wo liegt das Problem an der ganzen Sache?

Popov 18. Okt 2012 22:20

AW: Frage zur StringGrid
 
Mal davon abgesehen, dass ich dafür das böse with nutzen würde, so dass die Zeile etwas übersichtlicher aussieht

Delphi-Quellcode:
with StringGrid1 do Cells[4,1] := FloatToStr(StrToFloat(Cells[1,1]) * 30) * StrToFloat(Power(1.1, Cells[1,1]));
erkenne ich dein Fehler höchstens darin, dass du mit FloatToStr und StrToFloat etwas durcheinander kommst

evtl.

Delphi-Quellcode:
with StringGrid1 do Cells[4,1] := FloatToStr(

StrToFloat(Cells[1,1]) * 30

)

* // <<<<<<<<<<<<<<<< hier multiplizierst du einen String

StrToFloat(Power(1.1,

Cells[1,1] // <<<<<<<<<<<< das ist ein String. Vorher in Float umrechnen

)

);
Edit:

evtl.

Delphi-Quellcode:
with StringGrid1 do Cells[4,1] := FloatToStr(

StrToFloat(Cells[1,1]) * 30



Power(1.1, StrToFloat(Cells[1,1])

)); // ungeprüft
oder besser, weil man nicht so durcheinander kommt

Delphi-Quellcode:
var
  x: Double;
begin
  with StringGrid1 do
  begin
    x := StrToFloat(Cells[1,1]); //evtl. ist StrToFloatDef besser
    Cells[4,1] := FloatToStr(x * 30 * Power(1.1, x));
  end;
end;
Und nutze Leerzeichen. Ist ja kein Wunder, dass man durcheinander kommt.

Vidar92 18. Okt 2012 22:46

AW: Frage zur StringGrid
 
Danke für den Versuch der Hilfe, jedoch hat nichts geklappt. Ich habe auch aus deinen Hinweisen versucht bisschen was umzuformen damit es dann vlt klappt, aber es geht nicht.


Vllt hilft es ja, wenn ich ein bissl das Prog beschreibe:

Form1:
Durch Auwahl in einer Combobox gelange ich zu Form2, wo die StringGrid ist. Dort wähle ich dann in einer weiteren Combobox aus, welche Aktion ich ausführen möchte. Eine davon ist halt die Eingabe der Werte für die StringGrid. Wenn ich diese nun bestätige geht Form3 auf, wo ich dann die Werte eintrage und diese bestätige. Die Werte werden auch in die vorgesehen Zellen eingetragen, soweit so gut.
Nun kommt ja mein Hauptproblem. Sobald diese Werte (Meinetwegen 35 in Zelle 1,1) eingetragen sind, soll StringGrid mit der Formel dann in die vorgesehen Zelle berechnen.

Wie gesagt, ich hatte es schonmal, jedoch erinnere ich mich nicht mehr dran und finde es leider auch nicht heraus

Popov 18. Okt 2012 22:56

AW: Frage zur StringGrid
 
Ich weiß immer noch nicht so recht was das Problem ist, aber ich gebe dir einen kleinen Tip, weil ich denke, dass du lediglich durch deine Schreibweise in der du keine Leerzeichen einsetzt und dadurch die Formel derart unleserlich machst, dass man den Überblick verliert, einfach nur durcheinander kommst.

Der Tipp ist: lese zuerst die Werte aus der SG und konvertiere sie in Realzahlen. Rechne dann mit Realzahlen. Schreibe das Ergebnis in eine Realzahl Variable. Erst wenn alles berechnet ist, konvertiere diese Realzahl in String und schreib sie in SG.

Ich brauchte fast zwei Minuten bis ich deine Formel verstanden. Das ist das Superbeispiel wie man die Übersicht verlieren kann.

Furtbichler 19. Okt 2012 06:59

AW: Frage zur StringGrid
 
--- Redundantes Gefasel meinerseits ---

Sir Rufo 19. Okt 2012 07:50

AW: Frage zur StringGrid
 
Trenne die Daten von der Visualisierung (StringGrid) und benutze das StringGrid nur zur Anzeige und Eingabe.

Ein darunterliegendes 2-dimensionales Array speichert alles als Variant ab und darauf kannst du dann die Berechnungen durchführen und wieder anzeigen lassen.

Noch geschickter wäre allerdings ein Record mit der position und dem Inhalt in einer Liste zu verwalten.
Neuere Delphi-Versionen bringen auch ein TDictionary und ein TPair mit sich, da ist auch der Zugriff wesentlich einfacher zu gestalten.

Blup 19. Okt 2012 09:43

AW: Frage zur StringGrid
 
Zitat:

Zitat von Vidar92 (Beitrag 1187537)
Nun kommt ja mein Hauptproblem. Sobald diese Werte (Meinetwegen 35 in Zelle 1,1) eingetragen sind, soll StringGrid mit der Formel dann in die vorgesehen Zelle berechnen.

Die Zellen des Stringgrid nehmen von dir festgelegte Texte entgegen und das Stringgrid zeigt diese als Tabellen an. Mehr macht das Stringgrid nicht. Die Berechnung ist deine Aufgabe.
Zitat:

Zitat von Vidar92 (Beitrag 1187537)
Wenn ich diese nun bestätige geht Form3 auf, wo ich dann die Werte eintrage und diese bestätige. Die Werte werden auch in die vorgesehen Zellen eingetragen, soweit so gut.

Der Ausgangswert ist also bekannt. Wie wäre es wenn du an dieser Stelle auch gleich die Berechnung durchführst und das Ergebnis in den entsprechenden Zellen ablegst?

Vidar92 19. Okt 2012 15:50

AW: Frage zur StringGrid
 
Hab die Lösung meines Problemes heute Mittag lösen können, da mir einfiel, wieso nicht einfach über die Eingabe berechnen lassen. Immerhin kommen die Werte über nen Edit-Feld in die StringGrid und diese werden ja auch für die Berechnung benötigt!

Ja ich weiß, wirr warr aber ich sehe dennoch gut durch^^

Form2.StringGrid1.Cells[4,1]:=FloatToStr(StrToFloat(Edit1.Text)*30*(Power(1.1, StrToFloat(Edit1.Text))));

Die Berechnung klappt nun einwandfrei so wie sie sein soll =). Ich danke dennoch für eure Hilfen =)

DeddyH 19. Okt 2012 15:55

AW: Frage zur StringGrid
 
Zitat:

Zitat von Vidar92 (Beitrag 1187633)
Ja ich weiß, wirr warr aber ich sehe dennoch gut durch^^

In einem halben Jahr auch noch?

Vidar92 19. Okt 2012 16:43

AW: Frage zur StringGrid
 
Bisher habe ich immer durchgesehen, auch wenn der Quelltext mal 30-50 A4 Seiten lang war^^


Aber evlt nehme ich doch lieber eure Tipps an, denn denke mal schon das Ihr erfahrener seit als ich es noch bin:roll:


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