Dynamisches Array und Ausgabe in StringGrid

Neue Frage »

Auf diesen Beitrag antworten »
Rivago Dynamisches Array und Ausgabe in StringGrid

Hallo Wink

Hab hier eine Aufgabe, siehe Bild:

code:
1:
fs2.directupload.net/images/150601/6sxud3zn.png


Programmierung mit Pascal unter Lazarus (Version 1.2.6)..

Momentan sieht mein Programm so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
unit Unit1;
  {$mode objfpc}{$H+}
  interface
  uses
     Classes, SysUtils, FileUtil, TAGraph, Forms, Controls, Graphics, Dialogs, StdCtrls,Grids, Buttons, GUI_Unit_xyChart;

  type    { TForm1 }

    TForm1 = class(TForm)
     BitBtn1: TBitBtn;
     BU_EVA: TButton;
     Chart1: TChart;
     ED_Anzahl: TEdit;
     Label1: TLabel;
     Label2: TLabel;
     Label3: TLabel;
     Label4: TLabel;
     Label5: TLabel;
     Label6: TLabel;
     Label7: TLabel;
     Label8: TLabel;
     Label9: TLabel;
     LB_Erg: TListBox;
     SG_Erg: TStringGrid;
     procedure BU_EVAClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);

   private
     { private declarations }
   public     { public declarations }
   end;

  var
     Form1: TForm1;

  implementation

  {$R *.lfm}

  { TForm1 }

  var
     y1 : Array [0..99] of Double;
     y2 : Array [0..99] of Double;
     dt : Array [0..99] of Double; //Array, damit t ausgegeben werden kann                    
                                   //dabei ist dt = t = t + sw  

procedure TForm1.FormCreate(Sender: TObject);
begin   
  Form1.Caption := 'Test der gui_unit_xyChart';   
  BU_EVA.Caption := 'Berechnung';   

  //Testdaten   
  ED_Anzahl.Text := '20';    
  
  //Listbox leeren   
  Form1.LB_Erg.Clear;    

  //StringGrid leeren   
  Form1.SG_Erg.Clear;   

   //Diagramm leeren   
  //Form1.Chart1.Clear;  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! funktioniert so nicht 
 
end; //Ende Prozedur FormCreate

  procedure TForm1.BU_EVAClick(Sender: TObject);
 //Variablen deklarieren
  var    
    Anz,          //Anz = Anzahl der Wertepaare (mind. 10, max. 100)     
      i: Integer; // i ist Zählvariable für for-Schleife    
    sw,          //sw = Schrittweite     
     t: Double; //t für Formel

begin   
//Eingabe von Anz in ED_Anzahl
Anz := StrToInt(ED_Anzahl.Text);

//Plausibilitätsprüfung, ob Anz ausreichend ist
if (Anz < 10) or (Anz > 100)   
Then ShowMessage ('Wert muss >=10 und <=100 sein!');   

//Edit-Feld ED_Anzahl zur erneuten Eingabe vorbereiten, falls Fehler bei   //Plausibilitätsprüfung entstanden ist   
Ed_Anzahl.Clear; //Edit-Feld ED_Anzahl leeren   
Ed_Anzahl.SetFocus; //Cursor in Edit-Feld ED_Anzahl setzen   

 //Berechnung   
i := 0;   
sw := 20/(Anz - 1);  
t := 0;   

for i := 0 to Anz do     
begin       
   y1[i] := sin(t);       
   y2[i] := exp(0.1*(t)) * sin(t);       
   dt[i] := t;      
    t := t + sw;  //t um die Schrittweite erhöhen    
end; //Ende for-Schleife    

//Ausgabe  
//Ausgabe für Listbox LB_Erg  
LB_Erg.Items.Add(Format('%5.2s %20.2s %20.2s', ['t', 'y1', 'y2'])); //Tabellenkopf  
for i:=0 to Anz - 1 do    
begin
    LB_Erg.Items.Add(Format('%5.2n %20.2n %20.2n', [dt[i], y1[i], y2[i]]));   
end; //Ende for-Schleife    

//Ausgabe für StringGrid SG_Erg   
........................................
........................................
........................................
 end; //Ende Prozedur BU_EVAClick  

end.



Soweit läuft es.

Mich würde mal interessieren, ob und wie ich ein dynamisches Array hinkrieg? Wie sieht da der Quellcode aus?


Des Weiteren weiß ich nicht, wie ich die Ausgabe in das StringGrid machen muss. Kann mir da jemand helfen?


Wenn wir das geschafft haben, wäre es cool, wenn mir noch jemand erklären kann, wie ich das Diagramm hinkrieg smile


Danke und Gruß
Rivago
 
Auf diesen Beitrag antworten »
eulerscheZahl

Delphi ist bei mir schon eine Weile her.

Ein dynamisches Array deklarierst du mit
y1 : Array of Double;
dann kannst du mit
setlength(y1, 100); die Größe festlegen.

Den Rest schaue ich mir morgen an, wenn mir keiner zuvorkommt.
Auf diesen Beitrag antworten »
Rivago

Also einfach so:

y1 : Array of Double;
setlenght(y1, 100);

Das wars?

Geht dieses Array dann bei 1 oder bei 0 los?

Denn ich hab ja ursprünglich so deklariert:

y1: Array [0..99] of Double;

Also von 0 bis 99.


Ist deine Version jetzt von 1 bis 100?


Danke schonmal für die Antwort smile Wink
Auf diesen Beitrag antworten »
eulerscheZahl

Ist von 0 bis 99.
Du kannst du Grenzen auch explizit angeben:
code:
1:
2:
setlength(y1, 0, 99); //von 0 bis 99
setlength(y1, 1, 100); //von 1 bis 100


edit: hier das StringGrid
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
    t : real;
begin
  StringGrid1.RowCount := 101;
  StringGrid1.Cells[0, 0] := 't';
  StringGrid1.Cells[1, 0] := 'y1';
  StringGrid1.Cells[2, 0] := 'y2';
  for i := 1 to 100 do
  begin
    t := i / 10;
    StringGrid1.Cells[0, i] := FloatToStr(t);
    StringGrid1.Cells[1, i] := FloatToStr(sin(t));
    StringGrid1.Cells[2, i] := FloatToStr(exp(0.1*t)*sin(t));
  end;
end;
 
Auf diesen Beitrag antworten »
Rivago

Hallo eulersche Zahl, Danke für deine Hilfe Wink Daumen hoch
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »