Autor Beitrag
Kiwibanana
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 10.04.11 12:20 
Habe ein Problem beim Kompilieren.
ausblenden volle Höhe 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:
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:
unit Bubblesort_u;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    bt_eingabe: TButton;
    li_text: TListBox;
    li_sort: TListBox;
    bt_sort: TButton;
    bt_ende: TButton;
    procedure bt_endeClick(Sender: TObject);
    procedure bt_eingabeClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  z : string;
  mal,i : integer;
  feld : array of string;


implementation

{$R *.dfm}

procedure TForm1.bt_endeClick(Sender: TObject);
begin
  close
end;

procedure TForm1.bt_eingabeClick(Sender: TObject);
begin
  z := Inputbox('Sortieren','Wie viele Wörter bzw. Zahlen sollen sortiert werden (Geben Sie bitte die Anzahl der Wiederholungen ein!)','');
  mal := strtoint(z);
  for i := 1 to mal do
    begin
      feld[i] := inputbox('Eingabe','Geben Sie ihr ' + inttostr(i) + '. Wort ein','');
      li_text.Items.Add(feld[i]);
    end;

end;

end.


Das Programm lässt sich zwar kompilieren, aber nach Eingabe des ersten Wortes kommt ein Fehler.
Kann mir wer helfen ?
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: So 10.04.11 12:26 
Moin...
Zitat:
Kann mir wer helfen ?

ja. In der Regel der Fehler selbst. Die Fehlermeldung (wirklich) lesen...und debuggen.

Hinweis:

- Du benutzt ein dynamisches Array. Du mußt die Größe selbst festlegen.
- Was passiert wenn in die erste Inputbox ein "A" eingegeben wird ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.04.11 13:57 
Außerdem hast du aus Versehen Variablen global deklariert. Da sollte bei i auch eine entsprechende Compilerwarnung kommen. Ist halt keine gute Idee nicht zu lesen was da steht...

Zumindest i muss lokal deklariert werden, innerhalb der Prozedur. Das Array gehört z.B. unter private deklariert.
gnomecoder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51
Erhaltene Danke: 5



BeitragVerfasst: So 10.04.11 14:47 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Zumindest i muss lokal deklariert werden, innerhalb der Prozedur.


warum?
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: So 10.04.11 15:05 
user profile icongnomecoder hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Zumindest i muss lokal deklariert werden, innerhalb der Prozedur.


warum?


Es ist nicht zwingend, das läuft auch so, da du i ja immer den passenden Wert gibst.
Es ist aber trotzdem ein besserer Stil, wenn du die Laufvariablen immer nur innerhalb von den jweiligen Prozeduren deklarierst.
Generell solltest du versuchen so wenig Globale Variablen wie möglich zu verwenden.

Lg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.04.11 15:23 
Nicht umsonst gibt es eine entsprechende Compilerwarnung:
ausblenden Quelltext
1:
[DCC Warnung] Unit1218.pas(28): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein					
Da es früher erlaubt war auch globale Variablen als Schleifenvariable zu benutzen, ist dies aus Gründen der Abwärtskompatibilität weiter möglich. Der erzeugte Code kann dann aber signifikant langsamer sein, da eine Optimierung für den Compiler nicht mehr möglich ist...
gnomecoder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51
Erhaltene Danke: 5



BeitragVerfasst: So 10.04.11 15:26 
danke. wieder was dazu gelernt :)