![]() |
wie fügt man in ein zwedimensionales array werte ein
hallo ich habe bis jetzt folgendes geschrieben
Delphi-Quellcode:
ich will jetzt das ganze so umändern dass ich die daten nicht mehr direkt in ein stringgrid sondern erst in ein array einspeise(weil ich dann noch die werte für einen graphen brauche), das will ich mit der procedure Einspeichern tun, allerdings weiß ich jetzt nicht wie ich das mit den globalen variablen und dem 2D-array
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids, ExtCtrls; type TForm1 = class(TForm) BitBtn1: TBitBtn; GroupBox1: TGroupBox; EdSparbetrag: TEdit; EdFestzins: TEdit; EdMindestlaufzeit: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject); var i,Mindestlaufzeit:Integer; Festzins,Zinsen,Ende,Anfang:Real; begin Anfang:=StrToFloat(EdSparbetrag.Text); Festzins:=StrToFloat(EdFestzins.Text)/100; Mindestlaufzeit:=StrToInt(EdMindestlaufzeit.Text); StringGrid1.RowCount:=Mindestlaufzeit+1; for i:=1 to Mindestlaufzeit do with StringGrid1 do begin Cells[0,i]:=IntToStr(i); Cells[1,i]:=FloatToStrF(Anfang,ffFixed,10,3); Zinsen:=Anfang*Festzins; Cells[2,i]:=FloatToStrF(Zinsen,ffFixed,10,3); Ende:=Anfang+Zinsen; Cells[3,i]:=FloatToStrF(Ende,ffFixed,10,3); Anfang:=Ende; end; end; procedure TForm1.FormCreate(Sender: TObject); begin with StringGrid1 do begin Cells[0,0]:='Jahr'; Cells[1,0]:='Anfang'; Cells[2,0]:='Zinsen'; Cells[3,0]:='Ende'; end; end; procedure Einspeichern; begin end; end. machensoll: Meine Probleme sind: -Erzeugung des Arrays mit den globalen variablen -Erzeugung des Arrays mit i vielen Cells Ich habe leider so gut wie keine Erfahrung mit Arrays und hatte schon mal nachgefragt wie man die Arrays erstellt( ![]() Vielen Dank für Eure Hilfe Gruß Felix |
Re: wie fügt man in ein zwedimensionales array werte ein
Ist die Anzahl an Zellen im gesamten Programm fest (->statisches Array) oder ändert sie sich (->dynamisches Array)?
|
Re: wie fügt man in ein zwedimensionales array werte ein
also eigentlich ändert sie sich je nach eingabe in das edit feld EdMindestlaufzeit weil dann das Kapital um die Anzahl der Jahre verzinst wird, das array muss sich also um die anzahl der jahre erweitern... ich weiß nicht wie...
vielen dank für dein interesse |
Re: wie fügt man in ein zwedimensionales array werte ein
Sind beide Dimensionen dynamisch oder nur eine?
|
Re: wie fügt man in ein zwedimensionales array werte ein
nur die zweite dimension "nach unten" die erste ist fix ([0,0]jahr[1,0]anfang[2,0]zinsen[3,0]ende)
|
Re: wie fügt man in ein zwedimensionales array werte ein
Das ist sehr praktisch. Dann definierst du dein Array einfach mit
Delphi-Quellcode:
Wenn dann die tatsächliche Anzahl an Zeilen feststeht, führst du einfach ein setlength(meinArray, anzahlzeilen) durch.
var meinArray: array[0..3] of array of double;
|
Re: wie fügt man in ein zwedimensionales array werte ein
ja mein problem is jetzt nur das in den quelltext oben einzubinden, mit den globalen variablen...
|
Re: wie fügt man in ein zwedimensionales array werte ein
Entweder du definierst es als globale Variable oder als Feld von TForm1.
In BitBtn1Click führst du dann das selbe mit dem Array durch, was du zur Zeit mit dem Stringgrid machst (natürlich ohne die Konvertierungen zu strings). |
Re: wie fügt man in ein zwedimensionales array werte ein
Ich glaube, 2-dimensionale Arrays bieten sich für dein Fall überhaupt nicht an. Das, was du versuchst im Speicher abzubilden, nennt sich eine Datenliste.
Delphi-Quellcode:
Deine Anzahl der Spalten ist fest, die der Zeilen variabel.
Cells[0,0]:='Jahr';
Cells[1,0]:='Anfang'; Cells[2,0]:='Zinsen'; Cells[3,0]:='Ende'; Stell dir vor, du hast 30 Spalten zu verwalten, oder es kommt einfach morgen eine dazu. Weisst Du dann noch genau, dass Spalte 2 die Zinsen beinhaltet. Was, wenn du eine Spalte hast, die kein Float ist, sondern z.B. einen String beinhaltet, oder ein Boolean, oder auf irgendein anderes Objekt verweist. Erstell dir eine Klasse (oder von mir auch gern ein Record, wenns keine Funktionalität braucht):
Delphi-Quellcode:
Dazu eine TObjectList (irgendwie ist die heut bei mir sehr beliebt), die du in deiner Form im public Teil definierst:
TZinsen = class
public Anfang, Ende : TDateTime ; Zinsen : double ; end ;
Delphi-Quellcode:
Kommt eine Zinsenzeile dazu, dann geht das so:
TForm1 = class (TForm)
... public ZinsenList : TObjectList ; end ;
Delphi-Quellcode:
Die Klasse hat übrigens den Vorteil gegenüber einem einfachen Record, dass du auch direkt innerhalb der Klasse Berechnungen ausführen kannst, die nur das aktuelle Objekt betreffen.
procedure TForm1.NeuerZinssatz ;
var Zinsen : TZinsen ; begin Zinsen := TZinsen.Create ; Zinsen.Anfange := now ; Zinsen.Ende := EncodeDate (2007,12,31) ; Zinsen.Zinsen := 8.15 ; ZinsenListe.Add (Zinsen) ; end ; ObjectListen sind einfach zu durchlaufen, zu zählen, und auch nachher wieder freizugeben, denn die enthaltenen Objekte von TZinsen werden gleich mit freigegeben. |
Re: wie fügt man in ein zwedimensionales array werte ein
na ja ich probiers jetzt erst mal mit nem array weil ich das alles überschaubar halte es wird einkleines programm und in record und listen muss ich mich dann erst mal einarbeiten und ich ahbe leider nicht so viel zeit...
wie mach ich das dann an der stelle
Delphi-Quellcode:
weil
StringGrid1.RowCount:=Mindestlaufzeit+1;
Delphi-Quellcode:
funktioniert nicht...
meinArray.RowCount:=Mindestlaufzeit+1;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 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