Problem mit Array

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Problem mit Array

Beitrag von Foxi1896 »

Hey zusammen,

Ich habe folgendes geschrieben:
var
M, M_reib, M_i, M_fe, M_pa, M_v : Real;
R, C, U : Real;
I, eta ,{n_min,} n_sec : Real;
t, t_von, t_bis : Integer;
a : array[1..4,1..t] of String;
y : Integer;
warum kann ich in meinem array nicht t schreiben?
Warning: Local varibable "t" does not seem to be initalized
Error: Can't evaluate constant expression

Wie kann ich das machen wenn ich vorher nicht weiß wie groß t sein wird und das im Programm in einem Edit bestimme?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit Array

Beitrag von m.fuchs »

Foxi1896 hat geschrieben:warum kann ich in meinem array nicht t schreiben?
Wenn du ein statisches Array benutzt, muss du vorher die Bereichsgrenzen festlegen. Eine Variable funktioniert da nicht. Dann müsste das Array ja auch automatisch seine Größe ändern, wenn sich der Inhalt der Variablen ändert.
Foxi1896 hat geschrieben:Wie kann ich das machen wenn ich vorher nicht weiß wie groß t sein wird und das im Programm in einem Edit bestimme?
Was du benötigst ist ein dynamisches Array (Beschreibung). Dabei kannst du die Größe mit Hilfe von SetLength verändern.

Hier gibt es auch noch eine deutsche Beschreibung dazu: http://www.delphi-treff.de/tipps/object ... he-arrays/
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Problem mit Array

Beitrag von Foxi1896 »

ok so halbwegs verstehen du ich es, warum es nicht geht... aber ich kapiere jetzt gar nicht wie ich es verwirklichen kann.

Code: Alles auswählen

 
procedure TForm1.Start1Click(Sender: TObject);
var
   M, M_reib, M_i, M_fe, M_pa, M_v          : Real;
   R, C, U                                  : Real;
   I, eta ,{n_min,} n_sec                   : Real;
   t, t_von, t_bis                          : Integer;
   a                                        : array of array of string;
   y                                        : Integer;
 
 
const
  Strom=1;
  Drehzahl=2;
  Wirkungsgrad=3;
  Drehmoment=4;  
 
 for y:=1 to t do
    begin
    a[Strom       ,y]:=memo1.lines[y];
    a[Drehzahl    ,y]:=memo2.lines[y];
    a[Wirkungsgrad,y]:=memo3.lines[y];
    a[Drehmoment  ,y]:=memo4.lines[y];
    end;
 
 
 
  for y:=1 to t do
 
    Memo5.lines.add( 'Strom: '+a[Strom,y] +'[A]   '+
    'Drezahl: '+a[Drehzahl,y]+'[rpm]      '+'Wirkungsgrad: '
    +a[Wirkungsgrad,y]    +'[%/100]      '
    +'Drehmoment: '+a[Drehmoment,y]+'[Ncm]  ');
    end;  

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Problem mit Array

Beitrag von Thomas B. »

Dynamische Arrays fangen immer bei Null an und die Länge muss vor der ersten Benutzung festgelegt (der Speicher reserviert) werden. D.h. z.B. nicht 1 bis 4, sondern 0 bis 3

Code: Alles auswählen

SetLength(a,4);
// und dann für 2-dimensionale Arrays
SetLength(a[0],t);
SetLength(a[1],t);
SetLength(a[2],t);
SetLength(a[3],t);
Edit: ich sehe gerade, es geht auch gleich in deinem Fall SetLength(a,4,t)

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Problem mit Array

Beitrag von gocher »

Mir ist nicht so ganz klar was Du willst, hast Du vier Memo-Felder (Type TMemo) in denen jeweils Strom, Drehzahl, Wirkungsgrad und Drehmoment Werte stehen, die jeweils in einer Zeile stehen und die möchtest Du dann in ein fünftes Memo zusammengefügt ausgeben?
z.B so (vorausgesetzt alle Memo-Felder haben die selbe Zeilenzahl) ?

Code: Alles auswählen

for i := 0 to Memo1.Lines.Count-1 do
  Memo5.Lines.Add('Strom: ' + Memo1.Lines.Strings[i] + '[A]   ' +
                  'Drezahl: ' + Memo2.Lines.Strings[i] + '[rpm]      ' +
                  'Wirkungsgrad: ' + Memo3.Lines.Strings[i] + '[%/100]      ' +
                  'Drehmoment: ' + Memo4.Lines.Strings[i] + '[Ncm]'); 
Wenn es aber um eine Übung mit Arrays geht:

Code: Alles auswählen

setLength(a, Memo1.Lines.Count);
for i :=0 to Memo1.Lines.Count-1 do
begin
  setLength(a[i], 4);
  a[i][0] := Memo1.Lines.Strings[i];
  a[i][1] := Memo2.Lines.Strings[i];
  a[i][2] := Memo3.Lines.Strings[i];
  a[i][3] := Memo4.Lines.Strings[i];
end;  
Zuletzt geändert von gocher am Mi 12. Jun 2013, 16:50, insgesamt 2-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Problem mit Array

Beitrag von Foxi1896 »

bin immer noch verwirrt.
habe es jetzt hierhin kopiert:

Code: Alles auswählen

for y:=1 to t do
    begin
    SetLength(a,4,t);
    a[Strom       ,y]:=memo1.lines[y];
    a[Drehzahl    ,y]:=memo2.lines[y];
    a[Wirkungsgrad,y]:=memo3.lines[y];
    a[Drehmoment  ,y]:=memo4.lines[y];
    end;    
nun compiliert er aber wenn ich dann im Programm berechnen lasse kommt:
Projekt project1 hat Exception-Klasse <<External: SIGSEGV<< ausgelöst. Bei Adresse 403C51

edit: ja, genau ... habe für jedes ein memo und wollte sie dann alle zusammen nochmal in einem haben.
Zuletzt geändert von Lori am Mi 12. Jun 2013, 22:33, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Problem mit Array

Beitrag von Foxi1896 »

jetzt kommt er mit der dem error: indentifier idents no member "linescount"

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Problem mit Array

Beitrag von gocher »

Foxi1896 hat geschrieben:jetzt kommt er mit der dem error: indentifier idents no member "linescount"
An welcher Stelle, machst Du nun die Array-Version oder einfach das Verbinden von Zeichenketten? Es sieht so aus als fehlt bei Dir ein Punkt zwischen Lines und Count!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Problem mit Array

Beitrag von Foxi1896 »

ahh ja hab "." dazwischen vergessen. DANKE funktioniert !!!!! =)

Antworten