Autor Beitrag
AlffromMelmac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 08.03.06 21:09 
Hallo alle zusammen,

ich bräuchte eure Hilfe bzw. einen Tipp in die richtige Richtung.
Ich will Daten mit Hilfe eines opendialogs in ein Chart laden. Dies klappt(e) auch bisher ganz gut.
Wollte des Prog (mein erstes nicht Lehrbuch prog) mit 'echten' Daten testen und habe dadurch einen Fehler gefunden wo ich jetzt nicht weiter komm. Und zwar is dieser Progteil (s. unten) als integer ausgelegt und in der Realität brauch ich's auch für gleitkommazahlen. Leider komm ich aber ned so recht mit dem Austausch von integer mit double oder real zurecht weil ich noch a Anfänger bin. Könnte mir jdm. bitte erklären was ich falsch mach.
Vielen Dank für eure Hilfe

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TMainForm.FormCreate(Sender: TObject);
var
  i: integer;
begin
  LineSeries := FreqChart.Series[0as TLineSeries;
//  BarSeries := FreqChart.Series[0] as TBarSeries;
  OpenDialog.InitialDir := ExtractFilePath(ParamStr(0));
  FreqLabels := TStringList.Create;

  with FreqLabels do
    for i := 1 to MAX_VALUES do
      if i = 1
        then  Add('16')
      else if  i = 2
        then Add ('20')
        else if i= 3
....

end;


......

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TMainForm.DoFileOpenExecute(Sender: TObject);
var
  s: TStrings;
  i: integer;
begin
  s := TStringList.Create;
  with OpenDialog do
    if Execute then
    begin
      s.LoadFromFile(FileName);

    end
    else
    {for i := 1 to FreqLabels.Count do
      s.Add(IntToStr(RandomRange(400, 4000)));}

  LineSeries.Clear;
//  BarSeries.Clear;
  for i := 1 to Pred(s.Count) do
    LineSeries.AddY(StrToInt(s[i]), FreqLabels[i]);
//    BarSeries.AddY(StrToInt(s[i]), FreqLabels[i]);
  s.Free;
end;



Moderiert von user profile iconTino: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 16.03.2006 um 10:49
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 08.03.06 21:51 
Ok. Sind die FreqLabels nun die Daten die du anzeigen wilslt oder irgendwelche Ortientierungsmarken?

Egal, würde es ausreichen die real Daten per trunc(int) abzuschneiden oder fallen dann Rundungsfehler zu stark ins Gewicht?
AlffromMelmac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 08.03.06 23:42 
Hallo digi,

danke für die schnelle Antwort und entschuldige meine späte.

Mhmhm, gute idee, weil die Nachkommastellen eigentlich ned sehr interessieren. Aber er meckert noch dass die untere Grenze des Konstantenausdrucks unterschritten wird und dass er einen Konstantenausdruck erwartet.



ausblenden Delphi-Quelltext
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:
procedure TMainForm.DoFileOpenExecute(Sender: TObject);
var
  s: TStrings;
  i: integer;
<span style="color: red">[b]  z: trunc (i);[/b]</span>
begin
  s := TStringList.Create;
  with OpenDialog do
    if Execute then
    begin
      s.LoadFromFile(FileName);

    end
    else

[b]<span style="color: red">    for z := 1 to FreqLabels.Count do</span>[b][/b]      

s.Add(IntToStr(RandomRange(010000)));
  LineSeries.Clear;
//  BarSeries.Clear;
<span style="color: red"> [b] for z := 1 to Pred(s.Count) do[/b]</span>
    LineSeries.AddY(StrToInt(s[z]), FreqLabels[z]);
//    BarSeries.AddY(StrToInt(s[i]), FreqLabels[i]);
  s.Free;
end;
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 09.03.06 09:33 
Du hast z als trunc von i deklariert. i ist aber eh schon ein Integer, also ist das doch sinnlos oder?
Deklariere z erstmal als integer und weise es ihm dann in einer extra Zeile mit trunc() zu;
AlffromMelmac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Do 09.03.06 09:55 
Morgen,

Stimmt, was eh schon integer ist in ein integer umzuwandeln macht kaum Sinn.
Mhmhm, funktioniert leider noch nicht.
Sagt inkompatible Typen bei Zeile z:= trunc (s);
Wenn ich s also die Realwerte mit trunc () verbinde, wären sie doch integer. Habs ganz offensichtlich noch ned ganz kapiert.



ausblenden Delphi-Quelltext
1:
2:
3:
4:
var
  s: TStrings;
  i: integer;
  z: integer;
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
begin
  z := trunc (s);
  s := TStringList.Create;
  with OpenDialog do
    if Execute then
    begin
      s.LoadFromFile(FileName);

    end
    else
    for z := 1 to FreqLabels.Count do
      s.Add(IntToStr(RandomRange(010000)));
  LineSeries.Clear;
//  BarSeries.Clear;
  for z := 1 to Pred(s.Count) do
    LineSeries.AddY(StrToInt(s[z]), FreqLabels[z]);
//    BarSeries.AddY(StrToInt(s[i]), FreqLabels[i]);
  s.Free;
end;
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 09.03.06 11:49 
Fast. Trunc() funktioniert natürlich nur bei float Werten und nicht bei Strings, die einen Floatwert beeinhalten. Den musst du vorher mit strtofloat(); umwandeln.
AlffromMelmac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Fr 10.03.06 00:08 
Hab mir's nochmal recht lang durch den Kopf gehen lassen und hba's zu laufen gebracht...
Nochmals vielen Dank digi,
beste Grüße,

alf